All docs
This doc
...
You will first need to write a class implementing the org.apache.axis2.builder.Builder
interface in the Axis2 Kernel module and then override the processDocument
method. Within the processDocument
method, you can define your specific logic to process the payload content as required and then convert it to SOAP format.
Code Block | ||
---|---|---|
| ||
package org.test.builder; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.impl.OMNodeEx; import org.apache.axiom.om.impl.builder.StAXBuilder; import org.apache.axiom.om.impl.builder.StAXOMBuilder; import org.apache.axiom.om.util.StAXParserConfiguration; import org.apache.axiom.om.util.StAXUtils; import org.apache.axiom.soap.SOAPBody; import org.apache.axiom.soap.SOAPEnvelope; import org.apache.axiom.soap.SOAPFactory; import org.apache.axis2.AxisFault; import org.apache.axis2.Constants; import org.apache.axis2.builder.Builder; import org.apache.axis2.context.MessageContext; import org.apache.commons.codec.binary.Base64; import javax.xml.stream.XMLStreamException; import java.io.IOException; import java.io.InputStream; import java.io.PushbackInputStream; public class CustomBuilderForTextXml implements Builder{ public OMElement processDocument(InputStream inputStream, String s, MessageContext messageContext) throws AxisFault { SOAPFactory soapFactory = OMAbstractFactory.getSOAP11Factory(); SOAPEnvelope soapEnvelope = soapFactory.getDefaultEnvelope(); PushbackInputStream pushbackInputStream = new PushbackInputStream(inputStream); try { int byteVal = pushbackInputStream.read(); if (byteVal != -1) { pushbackInputStream.unread(byteVal); javax.xml.stream.XMLStreamReader xmlReader = StAXUtils.createXMLStreamReader(StAXParserConfiguration.SOAP, pushbackInputStream, (String) messageContext.getProperty(Constants.Configuration.CHARACTER_SET_ENCODING)); StAXBuilder builder = new StAXOMBuilder(xmlReader); OMNodeEx documentElement = (OMNodeEx) builder.getDocumentElement(); documentElement.setParent(null); String elementVal = ((OMElement) documentElement).getText(); byte[] bytesEncoded = Base64.encodeBase64(elementVal.getBytes()); ((OMElement) documentElement).setText(new String(bytesEncoded )); SOAPBody body = soapEnvelope.getBody(); body.addChild(documentElement); } } catch (IOException e) { e.printStackTrace(); } catch (XMLStreamException e) { e.printStackTrace(); } return soapEnvelope; } } |
<ESB_HOME>/repository/components/lib
folder.<ESB_HOME/repository/conf/axis2/axis2.xml>
file (or <ESB_HOME>/repository/conf/axis2/tenant-axis2.xml
if you are working in a multi-tenant environment):Code Block | ||
---|---|---|
| ||
<messageBuilder contentType="text/xml" class="org.test.builder.http.CustomBuilderForTextXml"/> |
...