package com.sun.xml.internal.ws.client.dispatch;
import com.sun.xml.internal.ws.api.addressing.WSEndpointReference;
import com.sun.xml.internal.ws.api.message.Message;
import com.sun.xml.internal.ws.api.message.Messages;
import com.sun.xml.internal.ws.api.message.Packet;
import com.sun.xml.internal.ws.api.pipe.Tube;
import com.sun.xml.internal.ws.api.client.WSPortInfo;
import com.sun.xml.internal.ws.binding.BindingImpl;
import com.sun.xml.internal.ws.client.WSServiceDelegate;
import com.sun.xml.internal.ws.client.PortInfo;
import com.sun.xml.internal.ws.encoding.xml.XMLMessage;
import com.sun.xml.internal.ws.message.source.PayloadSourceMessage;
import static com.sun.xml.internal.ws.binding.WebServiceFeatureList.toFeatureArray;
import javax.xml.namespace.QName;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Service.Mode;
import java.io.IOException;
final class RESTSourceDispatch extends DispatchImpl<Source> {
@Deprecated
public RESTSourceDispatch(QName port, Mode mode, WSServiceDelegate owner, Tube pipe, BindingImpl binding, WSEndpointReference epr) {
super(port, mode, owner, pipe, binding, epr);
assert isXMLHttp(binding);
}
public RESTSourceDispatch(WSPortInfo portInfo, Mode mode, BindingImpl binding, WSEndpointReference epr) {
super(portInfo, mode, binding, epr);
assert isXMLHttp(binding);
}
@Override
Source toReturnValue(Packet response) {
Message msg = response.getMessage();
try {
return new StreamSource(XMLMessage.getDataSource(msg, binding.getFeatures()).getInputStream());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
Packet createPacket(Source msg) {
Message message;
if(msg==null)
message = Messages.createEmpty(soapVersion);
else
message = new PayloadSourceMessage(null, msg, setOutboundAttachments(), soapVersion);
return new Packet(message);
}
}