public void setMarshaler(SaajMarshaler marshaler) {
this.marshaler = marshaler;
}
protected boolean transform(MessageExchange exchange, NormalizedMessage in, NormalizedMessage out) throws Exception {
SOAPConnection connection = getConnectionFactory().createConnection();
try {
SOAPMessage inMessage = marshaler.createSOAPMessage(in);
MimeHeaders mh = inMessage.getMimeHeaders();
if (mh.getHeader("SOAPAction") == null) {
if (soapAction != null && soapAction.length() > 0) {
mh.addHeader("SOAPAction", soapAction);
} else {
mh.addHeader("SOAPAction", "\"\"");
}
inMessage.saveChanges();
}
if (logger.isDebugEnabled()) {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
inMessage.writeTo(buffer);
logger.debug(new String(buffer.toByteArray()));
}
SOAPMessage response = connection.call(inMessage, soapEndpoint);
if (response != null) {
marshaler.toNMS(out, response);
return true;
} else {
return false;
}
}
finally {
try {
connection.close();
}
catch (SOAPException e) {
logger.warn("Failed to close connection", e);
}
}