You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ga...@apache.org on 2007/05/30 23:46:35 UTC

svn commit: r542943 - in /incubator/cxf/trunk/rt: bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java

Author: gawor
Date: Wed May 30 14:46:34 2007
New Revision: 542943

URL: http://svn.apache.org/viewvc?view=rev&rev=542943
Log:
replace headers as soap handlers could have changed the soap message

Modified:
    incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java

Modified: incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java?view=diff&rev=542943&r1=542942&r2=542943
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java Wed May 30 14:46:34 2007
@@ -28,6 +28,7 @@
 import javax.xml.soap.MessageFactory;
 import javax.xml.soap.SOAPConstants;
 import javax.xml.soap.SOAPException;
+import javax.xml.soap.SOAPHeader;
 import javax.xml.soap.SOAPMessage;
 import javax.xml.soap.SOAPPart;
 import javax.xml.stream.XMLStreamException;
@@ -95,44 +96,7 @@
             
             //replace header element if necessary
             if (message.hasHeaders()) {
-                NodeList headerEls = soapMessage.getSOAPHeader().getChildNodes();
-                int len = headerEls.getLength();
-                for (int i = 0; i < len; i++) {
-                    Node nd = headerEls.item(i);
-                    if (Node.ELEMENT_NODE == nd.getNodeType()) {
-                        Element hel = (Element)nd;
-                        HeaderProcessor p = BusFactory.getDefaultBus().getExtension(HeaderManager.class)
-                            .getHeaderProcessor(hel.getNamespaceURI());
-
-                        Object obj;
-                        DataBinding dataBinding = null;
-                        if (p == null || p.getDataBinding() == null) {
-                            obj = nd;
-                        } else {
-                            obj = p.getDataBinding().createReader(Node.class).read(nd);
-                        }
-                        //TODO - add the interceptors
-                        
-                        SoapHeader shead = new SoapHeader(new QName(nd.getNamespaceURI(),
-                                nd.getLocalName()),
-                                                           obj,
-                                                           dataBinding);
-                        String mu = hel.getAttributeNS(message.getVersion().getNamespace(),
-                                message.getVersion().getAttrNameMustUnderstand());
-                        String act = hel.getAttributeNS(message.getVersion().getNamespace(),
-                                message.getVersion().getAttrNameRole());
-                        
-                        shead.setActor(act);
-                        shead.setMustUnderstand(Boolean.valueOf(mu) || "1".equals(mu));
-                        Header oldHdr = message.getHeader(
-                                new QName(nd.getNamespaceURI(), nd.getLocalName()));
-                        if (oldHdr != null) {
-                            message.getHeaders().remove(oldHdr);
-                        } 
-                        message.getHeaders().add(shead);
-                        
-                    }
-                }
+                replaceHeaders(soapMessage, message);
             }
             
             XMLStreamReader xmlReader = message.getContent(XMLStreamReader.class);
@@ -150,6 +114,50 @@
             throw new SoapFault(new org.apache.cxf.common.i18n.Message(
                     "SOAPHANDLERINTERCEPTOR_EXCEPTION", BUNDLE), e, message
                     .getVersion().getSender());
+        }
+    }
+
+    public static void replaceHeaders(SOAPMessage soapMessage, SoapMessage message) throws SOAPException {
+        SOAPHeader header = soapMessage.getSOAPHeader();
+        if (header == null) {
+            return;
+        }
+        NodeList headerEls = header.getChildNodes();
+        int len = headerEls.getLength();
+        for (int i = 0; i < len; i++) {
+            Node nd = headerEls.item(i);
+            if (Node.ELEMENT_NODE == nd.getNodeType()) {
+                Element hel = (Element)nd;
+                HeaderProcessor p = BusFactory.getDefaultBus().getExtension(HeaderManager.class)
+                    .getHeaderProcessor(hel.getNamespaceURI());
+
+                Object obj;
+                DataBinding dataBinding = null;
+                if (p == null || p.getDataBinding() == null) {
+                    obj = nd;
+                } else {
+                    obj = p.getDataBinding().createReader(Node.class).read(nd);
+                }
+                //TODO - add the interceptors
+                
+                SoapHeader shead = new SoapHeader(new QName(nd.getNamespaceURI(),
+                        nd.getLocalName()),
+                                                   obj,
+                                                   dataBinding);
+                String mu = hel.getAttributeNS(message.getVersion().getNamespace(),
+                        message.getVersion().getAttrNameMustUnderstand());
+                String act = hel.getAttributeNS(message.getVersion().getNamespace(),
+                        message.getVersion().getAttrNameRole());
+                
+                shead.setActor(act);
+                shead.setMustUnderstand(Boolean.valueOf(mu) || "1".equals(mu));
+                Header oldHdr = message.getHeader(
+                        new QName(nd.getNamespaceURI(), nd.getLocalName()));
+                if (oldHdr != null) {
+                    message.getHeaders().remove(oldHdr);
+                } 
+                message.getHeaders().add(shead);                        
+            }
         }
     }
 

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java?view=diff&rev=542943&r1=542942&r2=542943
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java Wed May 30 14:46:34 2007
@@ -40,6 +40,7 @@
 import org.apache.cxf.binding.soap.interceptor.MustUnderstandInterceptor;
 import org.apache.cxf.binding.soap.interceptor.SoapActionInterceptor;
 import org.apache.cxf.binding.soap.interceptor.SoapInterceptor;
+import org.apache.cxf.binding.soap.saaj.SAAJInInterceptor;
 import org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor;
 import org.apache.cxf.endpoint.Endpoint;
 import org.apache.cxf.helpers.CastUtils;
@@ -116,7 +117,13 @@
             SOAPMessage msg = message.getContent(SOAPMessage.class);
             if (msg != null) {
                 XMLStreamReader xmlReader = createXMLStreamReaderFromSOAPMessage(msg);
-                message.setContent(XMLStreamReader.class, xmlReader);
+                message.setContent(XMLStreamReader.class, xmlReader);   
+                // replace headers
+                try {
+                    SAAJInInterceptor.replaceHeaders(msg, message);
+                } catch (SOAPException e) {
+                    e.printStackTrace();
+                }                
             }
         }
     }