You are viewing a plain text version of this content. The canonical link for it is here.
Posted to muse-commits@ws.apache.org by da...@apache.org on 2007/04/13 21:43:30 UTC

svn commit: r528629 - /webservices/muse/trunk/modules/muse-platform-mini/src/org/apache/muse/core/platform/mini/MiniIsolationLayer.java

Author: danj
Date: Fri Apr 13 12:43:29 2007
New Revision: 528629

URL: http://svn.apache.org/viewvc?view=rev&rev=528629
Log:
refactored the SOAP creation code in Mini so that we can use it in two places: 1) the normal case, when we 
take an operation response and package it up, and 2) when the WSA headers are missing or invalid, to the 
point where we can't service the request at all. In the latter case, we now send back a valid SOAP 
resposne with the WSA fault inside (but no WSA headers). We also avoid the NPE that would result if there 
were missing WSA headers.

Modified:
    webservices/muse/trunk/modules/muse-platform-mini/src/org/apache/muse/core/platform/mini/MiniIsolationLayer.java

Modified: webservices/muse/trunk/modules/muse-platform-mini/src/org/apache/muse/core/platform/mini/MiniIsolationLayer.java
URL: http://svn.apache.org/viewvc/webservices/muse/trunk/modules/muse-platform-mini/src/org/apache/muse/core/platform/mini/MiniIsolationLayer.java?view=diff&rev=528629&r1=528628&r2=528629
==============================================================================
--- webservices/muse/trunk/modules/muse-platform-mini/src/org/apache/muse/core/platform/mini/MiniIsolationLayer.java (original)
+++ webservices/muse/trunk/modules/muse-platform-mini/src/org/apache/muse/core/platform/mini/MiniIsolationLayer.java Fri Apr 13 12:43:29 2007
@@ -34,6 +34,7 @@
 import org.apache.muse.util.xml.XmlUtils;
 import org.apache.muse.ws.addressing.MessageHeaders;
 import org.apache.muse.ws.addressing.soap.SoapConstants;
+import org.apache.muse.ws.addressing.soap.SoapFault;
 import org.apache.muse.ws.addressing.soap.SoapUtils;
 
 /**
@@ -54,11 +55,67 @@
         _initialContext = initialContext;
     }
     
+    private Element createBody(Document doc, Element contents)
+    {
+        //
+        // add the result (valid or fault) to the SOAP body...
+        //
+        Element body = XmlUtils.createElement(doc, SoapConstants.BODY_QNAME);
+        contents = (Element)doc.importNode(contents, true);
+        body.appendChild(contents);
+        return body;
+    }
+    
+    protected Document createEnvelope(MessageHeaders wsa, Element contents)
+    {
+        Document doc = XmlUtils.createDocument();
+        Element env = createEnvelope(doc, wsa, contents);
+        doc.appendChild(env);
+        return doc;
+    }
+    
+    private Element createEnvelope(Document doc, MessageHeaders wsa, Element contents)
+    {
+        Element soap = XmlUtils.createElement(doc, SoapConstants.ENVELOPE_QNAME);
+        Element headers = createHeaders(doc, wsa);
+        Element body = createBody(doc, contents);
+        
+        soap.appendChild(headers);
+        soap.appendChild(body);
+        
+        return soap;
+    }
+    
     protected Environment createEnvironment()
     {
         return new MiniEnvironment(getInitialRequest(), getInitialContext());
     }
     
+    private Element createHeaders(Document doc, MessageHeaders wsa)
+    {
+        Element headers = XmlUtils.createElement(doc, SoapConstants.HEADER_QNAME);
+        
+        //
+        // no WS-A headers to return - probably an invalid SOAP request
+        //
+        if (wsa == null)
+            return headers;
+        
+        //
+        // import all of the headers into the response envelope...
+        //        
+        Element wsaXML = wsa.toXML();
+        Element[] children = XmlUtils.getAllElements(wsaXML);
+
+        for (int n = 0; n < children.length; ++n)
+        {
+            Node next = doc.importNode(children[n], true);
+            headers.appendChild(next);
+        }
+        
+        return headers;
+    }
+    
     protected ServletContext getInitialContext()
     {
         return _initialContext;
@@ -97,11 +154,15 @@
             env.addAddressingContext(addressing);
         }
 
-        catch (Throwable error)
+        catch (SoapFault error)
         {
+            //
+            // log error and return fault - we can't go any farther
+            //
             LoggingUtils.logError(router.getLog(), error);
+            return createEnvelope(null, error.toXML());
         }
-
+        
         if (!hasFailedToInitialize())
             LoggingUtils.logMessage(router.getLog(), request, true);
 
@@ -110,9 +171,6 @@
         //
         Element result = router.invoke(requestData);
         
-        //
-        // the standard response wsa:Action name is Action + "Response"
-        //
         MessageHeaders replyAddressing = null;
 
         //
@@ -130,34 +188,7 @@
         //
         env.removeAddressingContext();
 
-        //
-        // import all of the headers into the response envelope...
-        //        
-        Element replyXML = replyAddressing.toXML();
-        Element[] children = XmlUtils.getAllElements(replyXML);
-
-        Document response = XmlUtils.createDocument();
-
-        soap = XmlUtils.createElement(response, SoapConstants.ENVELOPE_QNAME);
-        response.appendChild(soap);
-
-        header = XmlUtils.createElement(response, SoapConstants.HEADER_QNAME);
-        soap.appendChild(header);
-
-        for (int n = 0; n < children.length; ++n)
-        {
-            Node next = response.importNode(children[n], true);
-            header.appendChild(next);
-        }
-
-        //
-        // add the result (valid or fault) to the SOAP body...
-        //
-        body = XmlUtils.createElement(response, SoapConstants.BODY_QNAME);
-        soap.appendChild(body);
-
-        result = (Element)response.importNode(result, true);
-        body.appendChild(result);
+        Document response = createEnvelope(replyAddressing, result);
 
         if (!hasFailedToInitialize())
             LoggingUtils.logMessage(router.getLog(), response, false);



---------------------------------------------------------------------
To unsubscribe, e-mail: muse-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: muse-commits-help@ws.apache.org