You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by ru...@apache.org on 2008/03/12 18:20:33 UTC

svn commit: r636429 - in /synapse/trunk/java/modules: core/src/main/java/org/apache/synapse/config/xml/ core/src/main/java/org/apache/synapse/mediators/transform/ transports/src/main/java/org/apache/synapse/transport/nhttp/

Author: ruwan
Date: Wed Mar 12 10:20:27 2008
New Revision: 636429

URL: http://svn.apache.org/viewvc?rev=636429&view=rev
Log:
Fixing the issue SYNAPSE-250

Modified:
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorFactory.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorSerializer.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java
    synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorFactory.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorFactory.java?rev=636429&r1=636428&r2=636429&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorFactory.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorFactory.java Wed Mar 12 10:20:27 2008
@@ -57,6 +57,7 @@
 
     private static final String SOAP11 = "soap11";
     private static final String SOAP12 = "soap12";
+    private static final String POX = "pox";
 
     public Mediator createMediator(OMElement elem) {
 
@@ -68,7 +69,9 @@
                 faultMediator.setSoapVersion(FaultMediator.SOAP11);
             } else if (SOAP12.equals(version.getAttributeValue())) {
                 faultMediator.setSoapVersion(FaultMediator.SOAP12);
-            }else {
+            } else if (POX.equals(version.getAttributeValue())) {
+                faultMediator.setSoapVersion(FaultMediator.POX);
+            } else {
                 String msg = "Invalid SOAP version";
                 log.error(msg);
                 throw new SynapseException(msg);

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorSerializer.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorSerializer.java?rev=636429&r1=636428&r2=636429&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorSerializer.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorSerializer.java Wed Mar 12 10:20:27 2008
@@ -42,6 +42,8 @@
 
     private static final String SOAP12 = "soap12";
 
+    private static final String POX = "pox";
+
     public OMElement serializeMediator(OMElement parent, Mediator m) {
 
         if (!(m instanceof FaultMediator)) {
@@ -55,9 +57,12 @@
         if(mediator.getSoapVersion()==FaultMediator.SOAP11) {
            fault.addAttribute(fac.createOMAttribute(
                 "version", nullNS, SOAP11));
-        }else if(mediator.getSoapVersion()==FaultMediator.SOAP12) {
+        } else if(mediator.getSoapVersion()==FaultMediator.SOAP12) {
            fault.addAttribute(fac.createOMAttribute(
                 "version", nullNS, SOAP12));
+        } else if(mediator.getSoapVersion()==FaultMediator.POX) {
+           fault.addAttribute(fac.createOMAttribute(
+                "version", nullNS, POX));
         }
 
         OMElement code = fac.createOMElement("code", synNS, fault);

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java?rev=636429&r1=636428&r2=636429&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java Wed Mar 12 10:20:27 2008
@@ -22,6 +22,7 @@
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMDocument;
 import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.soap.*;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.addressing.RelatesTo;
@@ -53,6 +54,8 @@
     public static final int SOAP11 = 1;
     /** Make a SOAP 1.2 fault */
     public static final int SOAP12 = 2;
+    /** Make a POX fault */
+    public static final int POX = 3;
     /** Holds the SOAP version to be used to make the fault, if specified */
     private int soapVersion;
 
@@ -90,25 +93,101 @@
                 return makeSOAPFault(synCtx, SOAP11, traceOrDebugOn, traceOn);
             case SOAP12:
                 return makeSOAPFault(synCtx, SOAP12, traceOrDebugOn, traceOn);
+            case POX:
+                return makePOXFault(synCtx, traceOrDebugOn, traceOn);
 
             default : {
-                // determine from current message's SOAP envelope namespace
-                SOAPEnvelope envelop = synCtx.getEnvelope();
-                if (envelop != null) {
-                    if (SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(
-                        envelop.getNamespace().getNamespaceURI())) {
-                        soapVersion = SOAP12;
-                        return makeSOAPFault(synCtx, SOAP12, traceOrDebugOn, traceOn);
+                // if this is a POX or REST message then make a POX fault
+                if (synCtx.isDoingPOX() || synCtx.isDoingGET()) {
+                    
+                    return makePOXFault(synCtx, traceOrDebugOn, traceOn);
+
+                } else {
+                    
+                    // determine from current message's SOAP envelope namespace
+                    SOAPEnvelope envelop = synCtx.getEnvelope();
+                    if (envelop != null) {
+                        
+                        if (SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(
+                            envelop.getNamespace().getNamespaceURI())) {
+
+                            soapVersion = SOAP12;
+                            return makeSOAPFault(synCtx, SOAP12, traceOrDebugOn, traceOn);
+
+                        } else {
+                            soapVersion = SOAP11;
+                            return makeSOAPFault(synCtx, SOAP11, traceOrDebugOn, traceOn);
+                        }
+                        
                     } else {
-                        soapVersion = SOAP11;
+                        // default to SOAP 11
                         return makeSOAPFault(synCtx, SOAP11, traceOrDebugOn, traceOn);
                     }
-                } else {
-                    // default to SOAP 11
-                    return makeSOAPFault(synCtx, SOAP11, traceOrDebugOn, traceOn);
                 }
             }
         }
+    }
+
+    private boolean makePOXFault(MessageContext synCtx, boolean traceOrDebugOn, boolean traceOn) {
+
+        OMFactory fac = synCtx.getEnvelope().getOMFactory();
+        OMElement faultPayload = fac.createOMElement(new QName("Exception"));
+
+        if (faultDetail != null) {
+
+            if (traceOrDebugOn) {
+                traceOrDebug(traceOn, "Setting the fault detail : "
+                    + faultDetail + " as athe POX Fault");
+            }
+
+            faultPayload.setText(faultDetail);
+
+        } else if (faultReasonValue != null) {
+
+            if (traceOrDebugOn) {
+                traceOrDebug(traceOn, "Setting the fault reason : "
+                    + faultReasonValue + " as athe POX Fault");
+            }
+
+            faultPayload.setText(faultReasonValue);
+
+        } else if (faultReasonExpr != null) {
+
+            String faultReason = faultReasonExpr.getStringValue(synCtx);
+            faultPayload.setText(faultReason);
+
+            if (traceOrDebugOn) {
+                traceOrDebug(traceOn, "Setting the fault detail : "
+                    + faultDetail + " as athe POX Fault");
+            }
+        }
+
+        SOAPBody body = synCtx.getEnvelope().getBody();
+        if (body != null) {
+
+            if (body.getFirstElement() != null) {
+                body.getFirstElement().detach();
+            }
+            
+            body.addChild(faultPayload);
+        }
+
+        synCtx.setFaultResponse(true);
+        ((Axis2MessageContext) synCtx).getAxis2MessageContext().setProcessingFault(true);
+
+        if (traceOrDebugOn) {
+            String msg =
+                "Original SOAP Message : " + synCtx.getEnvelope().toString() +
+                "POXFault Message created : " + faultPayload.toString();
+            if (traceOn && trace.isTraceEnabled()) {
+                trace.trace(msg);
+            }
+            if (log.isTraceEnabled()) {
+                log.trace(msg);
+            }
+        }
+
+        return true;
     }
 
     /**

Modified: synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java?rev=636429&r1=636428&r2=636429&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java (original)
+++ synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java Wed Mar 12 10:20:27 2008
@@ -333,7 +333,7 @@
             messageFormatter.getContentType(msgContext, format, msgContext.getSoapAction()));
 
         // return http 500 when a SOAP fault is returned
-        if (msgContext.getEnvelope().getBody().hasFault()) {
+        if (msgContext.getEnvelope().getBody().hasFault() || msgContext.isProcessingFault()) {
             response.setStatusCode(HttpStatus.SC_INTERNAL_SERVER_ERROR);
         }