package org.apache.synapse.core.axis2; import java.io.IOException; import javax.xml.stream.XMLStreamException; import org.apache.axiom.om.OMElement; import org.apache.axis2.AxisFault; import org.apache.axis2.context.MessageContext; import org.apache.axis2.description.AxisOperation; import org.apache.axis2.description.AxisService; import org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher; import org.apache.synapse.transport.passthru.util.RelayUtils; public class SynapseSOAPMessageBodyBasedDispatcher extends SOAPMessageBodyBasedDispatcher { @Override public AxisOperation findOperation(AxisService axisService, MessageContext mc) throws AxisFault { checkPTMessageAndBuild(mc); return super.findOperation(axisService, mc); } @Override public AxisService findService(MessageContext mc) throws AxisFault { checkPTMessageAndBuild(mc); return super.findService(mc); } private void checkPTMessageAndBuild(MessageContext mc) { OMElement body = mc.getEnvelope().getBody(); if (body.getFirstElement() == null) { // Can be a pass-through case try to build and see. try { RelayUtils.buildMessage(mc, false); } catch (IOException e) { e.printStackTrace(); } catch (XMLStreamException e) { e.printStackTrace(); } } } }