Imports: -----------------SNIP-------------------- import org.apache.axis.Message; import org.apache.axis.message.SOAPBodyElement; import org.apache.axis.message.SOAPEnvelope;
import org.jdom.Document; import org.jdom.input.SAXBuilder; import org.jdom.output.DOMOutputter;
import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList;
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; -----------------SNIP--------------------
Then in invoke:
-----------------SNIP--------------------
SAXBuilder saxBuild = new SAXBuilder(); DOMOutputter domOut = new DOMOutputter(); Message msg = msgContext.getCurrentMessage();
ByteArrayOutputStream baos = new ByteArrayOutputStream(); msg.writeTo(baos); baos.close();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); Document msgJdomDoc = saxBuild.build(bais); bais.close();
// Custom code to modify Document goes in here...
Element msgDomElem = domOut.output(msgJdomDoc).getDocumentElement();
NodeList bodyNodes = msgDomElem.getElementsByTagNameNS(SOAP_ENV_URI, "Body");
if (bodyNodes.getLength() != 1) return;
NodeList bodyElemList = bodyNodes.item(0).getChildNodes();
SOAPEnvelope soapEnv = new SOAPEnvelope();
for (int i = 0; i < bodyElemList.getLength(); i++) {
Node bodyElem = bodyElemList.item(i);
if (bodyElem.getNodeType() == Node.ELEMENT_NODE) {
SOAPBodyElement soapBodyElem = new SOAPBodyElement((Element)bodyElem);
soapEnv.addBodyElement(soapBodyElem);
}
}
Message newMsg = new Message((Object)soapEnv); msgContext.setCurrentMessage(newMsg);
-----------------SNIP--------------------
Hope this helps (there's a few exceptions you'll need to catch),
stephen
[EMAIL PROTECTED] wrote:
I'm trying to write a web service that will take the incoming SOAP Header and Body elements and invoke another web service using the Header and Body elements I previously gathered. I looked for methods to add the header and body elements to the envelope, but didn't find anything useful. Do I have to iterate through all the header and body children to get this accomplished or is there an easier way? Does anyone have sample code?
Thanks,
David
