You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by mi...@apache.org on 2009/03/04 07:56:38 UTC

svn commit: r749923 - /ode/trunk/axis2/src/main/java/org/apache/ode/axis2/soapbinding/SoapMessageConverter.java

Author: milinda
Date: Wed Mar  4 06:56:38 2009
New Revision: 749923

URL: http://svn.apache.org/viewvc?rev=749923&view=rev
Log:
Issues with SOAP Header handling for external service invocation and process response fixed.

Modified:
    ode/trunk/axis2/src/main/java/org/apache/ode/axis2/soapbinding/SoapMessageConverter.java

Modified: ode/trunk/axis2/src/main/java/org/apache/ode/axis2/soapbinding/SoapMessageConverter.java
URL: http://svn.apache.org/viewvc/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/soapbinding/SoapMessageConverter.java?rev=749923&r1=749922&r2=749923&view=diff
==============================================================================
--- ode/trunk/axis2/src/main/java/org/apache/ode/axis2/soapbinding/SoapMessageConverter.java (original)
+++ ode/trunk/axis2/src/main/java/org/apache/ode/axis2/soapbinding/SoapMessageConverter.java Wed Mar  4 06:56:38 2009
@@ -156,7 +156,7 @@
             msgCtx.setEnvelope(soapEnv);
         }
 
-        createSoapHeaders(soapEnv, getSOAPHeaders(bi), op.getInput().getMessage(), message.getHeaderParts());
+        createSoapHeaders(soapEnv, getSOAPHeaders(bi), op.getInput().getMessage(), message);
 
         SOAPBody soapBody = getSOAPBody(bi);
         if (soapBody != null) {
@@ -190,7 +190,7 @@
         }
 
         if (message.getHeaderParts().size() > 0 || getSOAPHeaders(bo).size() > 0)
-            createSoapHeaders(soapEnv, getSOAPHeaders(bo), op.getOutput().getMessage(), message.getHeaderParts());
+            createSoapHeaders(soapEnv, getSOAPHeaders(bo), op.getOutput().getMessage(), message);
 
         SOAPBody soapBody = getSOAPBody(bo);
         if (soapBody != null) {
@@ -199,13 +199,13 @@
         }
     }
 
-    public void createSoapHeaders(SOAPEnvelope soapEnv, List<SOAPHeader> headerDefs, Message msgdef, Map<String,Node> headers) throws AxisFault {
-        for (SOAPHeader sh : headerDefs) handleSoapHeaderDef(soapEnv, sh, msgdef, headers);
+    public void createSoapHeaders(SOAPEnvelope soapEnv, List<SOAPHeader> headerDefs, Message msgdef, org.apache.ode.bpel.iapi.Message message) throws AxisFault {
+        for (SOAPHeader sh : headerDefs) handleSoapHeaderDef(soapEnv, sh, msgdef, message);
 
         org.apache.axiom.soap.SOAPHeader soaphdr = soapEnv.getHeader();
         if (soaphdr == null) soaphdr = _soapFactory.createSOAPHeader(soapEnv);
 
-        for (Node headerNode : headers.values())
+        for (Node headerNode : message.getHeaderParts().values())
             if (headerNode.getNodeType() == Node.ELEMENT_NODE) {
                 if (soaphdr.getFirstChildWithName(new QName(headerNode.getNamespaceURI(), headerNode.getLocalName())) == null) {
                     OMElement omHeaderNode = OMUtils.toOM((Element) headerNode, _soapFactory);
@@ -231,7 +231,8 @@
     }
 
     @SuppressWarnings("unchecked")
-    private void handleSoapHeaderDef(SOAPEnvelope soapEnv, SOAPHeader headerdef, Message msgdef, Map<String, Node> headers) throws AxisFault {
+    private void handleSoapHeaderDef(SOAPEnvelope soapEnv, SOAPHeader headerdef, Message msgdef, org.apache.ode.bpel.iapi.Message message) throws AxisFault {
+        Map<String,Node> headers = message.getHeaderParts();
         boolean payloadMessageHeader = headerdef.getMessage() == null || headerdef.getMessage().equals(msgdef.getQName());
 
         if (headerdef.getPart() == null) return;
@@ -250,8 +251,13 @@
 
         // We don't complain about missing header data unless they are part of the message payload. This is
         // because AXIS may be providing these headers.
-        if (srcPartEl == null && payloadMessageHeader)
-            throw new OdeFault(__msgs.msgOdeMessageMissingRequiredPart(headerdef.getPart()));
+        if (srcPartEl == null && payloadMessageHeader){
+            if(message.getPart(headerdef.getPart()) != null){
+                srcPartEl = (Element)message.getPart(headerdef.getPart());
+            }else{
+                throw new OdeFault(__msgs.msgOdeMessageMissingRequiredPart(headerdef.getPart()));
+            }
+        }
 
         if (srcPartEl == null) return;