}
public void invoke(MessageContext msgContext) throws AxisFault {
try {
OMOutputFormat format = new OMOutputFormat();
String charSetEnc =
(String) msgContext
.getProperty(MessageContext.CHARACTER_SET_ENCODING);
if (charSetEnc != null) {
format.setCharSetEncoding(charSetEnc);
} else {
OperationContext opctx = msgContext.getOperationContext();
if (opctx != null) {
charSetEnc = (String) opctx
.getProperty(MessageContext.CHARACTER_SET_ENCODING);
}
}
/**
* If the char set enc is still not found use the default
*/
if (charSetEnc == null) {
charSetEnc = MessageContext.DEFAULT_CHAR_SET_ENCODING;
}
msgContext.setDoingMTOM(HTTPTransportUtils.doWriteMTOM(msgContext));
msgContext.setDoingREST(HTTPTransportUtils.isDoingREST(msgContext));
format.setSOAP11(msgContext.isSOAP11());
format.setDoOptimize(msgContext.isDoingMTOM());
format.setCharSetEncoding(charSetEnc);
// Trasnport URL can be different from the WSA-To. So processing
// that now.
EndpointReference epr = null;
String transportURL =
(String) msgContext
.getProperty(MessageContextConstants.TRANSPORT_URL);
if (transportURL != null) {
epr = new EndpointReference(transportURL);
} else if ((msgContext.getTo() != null)
&& !AddressingConstants.Submission.WSA_ANONYMOUS_URL
.equals(msgContext.getTo().getAddress()) &&
!AddressingConstants.Final
.WSA_ANONYMOUS_URL
.equals(msgContext.getTo().getAddress())) {
epr = msgContext.getTo();
}
// Check for the REST behaviour, if you desire rest beahaviour
// put a <parameter name="doREST" value="true"/> at the
// server.xml/client.xml file
// ######################################################
// Change this place to change the wsa:toepr
// epr = something
// ######################################################
OMElement dataOut;
/**
* Figuringout the REST properties/parameters
*/
if (msgContext.isDoingREST()) {
dataOut = msgContext.getEnvelope().getBody().getFirstElement();
} else {
dataOut = msgContext.getEnvelope();
}
if (epr != null) {
writeMessageWithCommons(msgContext, epr, dataOut, format);
} else {
OutputStream out =
(OutputStream) msgContext
.getProperty(MessageContext.TRANSPORT_OUT);
if (msgContext.isServerSide()) {
OutTransportInfo transportInfo =
(OutTransportInfo) msgContext
.getProperty(Constants.OUT_TRANSPORT_INFO);
if (transportInfo != null) {
boolean soap11 = msgContext.isSOAP11();
format.setSOAP11(soap11);
String contentType = format.getContentType();
String encoding = contentType + "; charset="
+ format.getCharSetEncoding();
transportInfo.setContentType(encoding);
} else {
throw new AxisFault(Constants.OUT_TRANSPORT_INFO +
" has not been set");
}
}
format.setDoOptimize(msgContext.isDoingMTOM());
dataOut.serializeAndConsume(out, format);
}
if (msgContext.getOperationContext() != null) {
msgContext.getOperationContext()