You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by ve...@apache.org on 2009/03/20 09:58:15 UTC
svn commit: r756377 -
/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMessageContext.java
Author: veithen
Date: Fri Mar 20 08:58:13 2009
New Revision: 756377
URL: http://svn.apache.org/viewvc?rev=756377&view=rev
Log:
Added an addHeader method in ScriptMessageContext to make it easy to add new SOAP headers in scripts:
<script language="js"><![CDATA[
var sessionId = mc.getProperty('sessionId');
mc.addHeader(true,
<SessionHeader xmlns="http://soap.sforce.com/schemas/class/MyService">
<sessionId>{sessionId}</sessionId>
</SessionHeader>
);
]]></script>
Modified:
synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMessageContext.java
Modified: synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMessageContext.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMessageContext.java?rev=756377&r1=756376&r2=756377&view=diff
==============================================================================
--- synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMessageContext.java (original)
+++ synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMessageContext.java Fri Mar 20 08:58:13 2009
@@ -19,16 +19,22 @@
package org.apache.synapse.mediators.bsf;
+import java.util.Iterator;
import java.util.Set;
import java.util.Stack;
import java.util.Map;
import javax.script.ScriptException;
+import org.apache.axiom.om.OMAttribute;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMException;
+import org.apache.axiom.om.OMNode;
import org.apache.axiom.soap.SOAPBody;
import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPFactory;
+import org.apache.axiom.soap.SOAPHeader;
+import org.apache.axiom.soap.SOAPHeaderBlock;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.addressing.RelatesTo;
@@ -90,6 +96,38 @@
}
/**
+ * Add a new SOAP header to the message.
+ *
+ * @param mustUnderstand the value for the <code>soapenv:mustUnderstand</code> attribute
+ * @param content the XML for the new header
+ * @throws ScriptException if an error occurs when converting the XML to OM
+ */
+ public void addHeader(boolean mustUnderstand, Object content) throws ScriptException {
+ SOAPEnvelope envelope = mc.getEnvelope();
+ SOAPFactory factory = (SOAPFactory)envelope.getOMFactory();
+ SOAPHeader header = envelope.getHeader();
+ if (header == null) {
+ header = factory.createSOAPHeader(envelope);
+ }
+ OMElement element = xmlHelper.toOMElement(content);
+ // We can't add the element directly to the SOAPHeader. Instead, we need to copy the
+ // information over to a SOAPHeaderBlock.
+ SOAPHeaderBlock headerBlock = header.addHeaderBlock(element.getLocalName(),
+ element.getNamespace());
+ for (Iterator it = element.getAllAttributes(); it.hasNext(); ) {
+ headerBlock.addAttribute((OMAttribute)it.next());
+ }
+ headerBlock.setMustUnderstand(mustUnderstand);
+ OMNode child = element.getFirstOMChild();
+ while (child != null) {
+ // Get the next child before addChild will detach the node from its original place.
+ OMNode next = child.getNextOMSibling();
+ headerBlock.addChild(child);
+ child = next;
+ }
+ }
+
+ /**
* Get the XML representation of the complete SOAP envelope
* @return return an object that represents the payload in the current scripting language
* @throws ScriptException For erroing when geting the XML representation of SOAP envelope