You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@synapse.apache.org by ru...@apache.org on 2007/03/28 12:42:23 UTC

svn commit: r523268 - in /webservices/synapse/trunk/java/modules: core/src/main/java/org/apache/synapse/core/axis2/ core/src/main/java/org/apache/synapse/mediators/base/ extensions/src/main/java/org/apache/synapse/mediators/transform/

Author: ruwan
Date: Wed Mar 28 03:42:00 2007
New Revision: 523268

URL: http://svn.apache.org/viewvc?view=rev&rev=523268
Log:
Fixing SYNAPSE-85

Modified:
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/base/SequenceMediator.java
    webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/transform/XSLTMediator.java

Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java?view=diff&rev=523268&r1=523267&r2=523268
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java Wed Mar 28 03:42:00 2007
@@ -76,7 +76,7 @@
 
                     Mediator faultSequence = synCtx.getSequence(proxy.getTargetFaultSequence());
                     if (faultSequence != null) {
-                        log.debug("setting the fault-sequence of the " +
+                        log.debug("Setting the fault-sequence of the " +
                                 "proxy service to MessageContext");
                         synCtx.pushFaultHandler(new MediatorFaultHandler(
                                 synCtx.getSequence(proxy.getTargetFaultSequence())));

Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java?view=diff&rev=523268&r1=523267&r2=523268
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java Wed Mar 28 03:42:00 2007
@@ -28,6 +28,7 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.Constants;
 import org.apache.synapse.FaultHandler;
+import org.apache.synapse.SynapseException;
 import org.apache.synapse.endpoints.Endpoint;
 import org.apache.axiom.soap.SOAPFault;
 
@@ -50,7 +51,7 @@
     public void receive(MessageContext messageCtx) throws AxisFault {
 
         if (messageCtx.getOptions() != null && messageCtx.getOptions().getRelatesTo() != null) {
-            String messageID  = messageCtx.getOptions().getRelatesTo().getValue();
+            String messageID = messageCtx.getOptions().getRelatesTo().getValue();
             Callback callback = (Callback) callbackStore.remove(messageID);
 
             RelatesTo[] relates = messageCtx.getRelationships();
@@ -66,7 +67,7 @@
             } else {
                 // TODO invoke a generic synapse error handler for this message
                 log.warn("Synapse received a response for the request with message Id : " +
-                    messageID + " But a callback has not been registered to process this response");
+                        messageID + " But a callback has not been registered to process this response");
             }
 
         } else {
@@ -78,13 +79,13 @@
     /**
      * Handle the response or error (during a failed send) message received for an outgoing request
      *
-     * @param response the Axis2 MessageContext that has been received and has to be handled
+     * @param response         the Axis2 MessageContext that has been received and has to be handled
      * @param synapseOutMsgCtx the corresponding (outgoing) Synapse MessageContext for the above
-     * Axis2 MC, that holds Synapse specific information such as the error handler stack and
-     * local properties etc.
+     *                         Axis2 MC, that holds Synapse specific information such as the error handler stack and
+     *                         local properties etc.
      */
     private void handleMessage(MessageContext response,
-        org.apache.synapse.MessageContext synapseOutMsgCtx) {
+                               org.apache.synapse.MessageContext synapseOutMsgCtx) {
 
         Object o = response.getProperty("sending_fault");
         if (o != null && Boolean.TRUE.equals(o)) {
@@ -97,14 +98,14 @@
                 SOAPFault fault = response.getEnvelope().getBody().getFault();
                 Exception e = fault.getException();
                 if (e == null) {
-                    e = new Exception(fault.toString());    
+                    e = new Exception(fault.toString());
                 }
 
-                ((FaultHandler) faultStack.pop()).handleFault(synapseOutMsgCtx,e);
+                ((FaultHandler) faultStack.pop()).handleFault(synapseOutMsgCtx, e);
             }
 
         } else {
-             
+
             // there can always be only one instance of an Endpoint in the faultStack of a message
             // if the send was successful, so remove it before we proceed any further
             Stack faultStack = synapseOutMsgCtx.getFaultStack();
@@ -115,14 +116,14 @@
             if (log.isDebugEnabled()) {
                 log.debug("Synapse received an asynchronous response message");
                 log.debug("Received To: " +
-                    (response.getTo() != null ? response.getTo().getAddress() : "null"));
+                        (response.getTo() != null ? response.getTo().getAddress() : "null"));
                 log.debug("SOAPAction: " +
-                    (response.getSoapAction() != null ? response.getSoapAction() : "null"));
+                        (response.getSoapAction() != null ? response.getSoapAction() : "null"));
                 log.debug("Body : \n" + response.getEnvelope());
             }
 
             MessageContext axisOutMsgCtx =
-                ((Axis2MessageContext)synapseOutMsgCtx).getAxis2MessageContext();
+                    ((Axis2MessageContext) synapseOutMsgCtx).getAxis2MessageContext();
 
             response.setOperationContext(axisOutMsgCtx.getOperationContext());
             response.getAxisMessage().setParent(
@@ -133,9 +134,9 @@
             response.setServerSide(true);
             response.setProperty(Constants.ISRESPONSE_PROPERTY, Boolean.TRUE);
             response.setProperty(MessageContext.TRANSPORT_OUT,
-                axisOutMsgCtx.getProperty(MessageContext.TRANSPORT_OUT));
+                    axisOutMsgCtx.getProperty(MessageContext.TRANSPORT_OUT));
             response.setProperty(org.apache.axis2.Constants.OUT_TRANSPORT_INFO,
-                axisOutMsgCtx.getProperty(org.apache.axis2.Constants.OUT_TRANSPORT_INFO));
+                    axisOutMsgCtx.getProperty(org.apache.axis2.Constants.OUT_TRANSPORT_INFO));
             response.setTransportIn(axisOutMsgCtx.getTransportIn());
             response.setTransportOut(axisOutMsgCtx.getTransportOut());
 
@@ -143,15 +144,15 @@
             response.setDoingREST(axisOutMsgCtx.isDoingREST());
             if (axisOutMsgCtx.getMessageID() != null) {
                 response.setRelationships(
-                    new RelatesTo[] {new RelatesTo(axisOutMsgCtx.getMessageID())});
+                        new RelatesTo[]{new RelatesTo(axisOutMsgCtx.getMessageID())});
             }
 
             // create the synapse message context for the response
             Axis2MessageContext synapseInMessageContext =
-                new Axis2MessageContext(
-                    response,
-                    synapseOutMsgCtx.getConfiguration(),
-                    synapseOutMsgCtx.getEnvironment());
+                    new Axis2MessageContext(
+                            response,
+                            synapseOutMsgCtx.getConfiguration(),
+                            synapseOutMsgCtx.getEnvironment());
 
             synapseInMessageContext.setResponse(true);
             synapseInMessageContext.setTo(null);
@@ -162,12 +163,21 @@
             while (iter.hasNext()) {
                 Object key = iter.next();
                 synapseInMessageContext.setProperty(
-                    (String) key, synapseOutMsgCtx.getProperty((String) key));
+                        (String) key, synapseOutMsgCtx.getProperty((String) key));
             }
 
             // send the response message through the synapse mediation flow
-            synapseOutMsgCtx.getEnvironment().
-                injectMessage(synapseInMessageContext);
+            try {
+                synapseOutMsgCtx.getEnvironment().injectMessage(synapseInMessageContext);
+            } catch (SynapseException syne) {
+                if (!synapseInMessageContext.getFaultStack().isEmpty()) {
+                    ((FaultHandler) synapseInMessageContext
+                            .getFaultStack().pop()).handleFault(synapseInMessageContext, syne);
+                } else {
+                    log.error("Synapse encountered an exception, " +
+                            "No error handlers found - [Message Dropped]\n" + syne.getMessage());
+                }
+            }
         }
     }
 
@@ -176,13 +186,13 @@
         int insertPos = 0;
         RelatesTo[] newRelates = new RelatesTo[relates.length];
 
-        for (int i=0; i<relates.length; i++) {
+        for (int i = 0; i < relates.length; i++) {
             RelatesTo current = relates[i];
             boolean found = false;
 
-            for (int j=0; j<newRelates.length && j<insertPos; j++) {
+            for (int j = 0; j < newRelates.length && j < insertPos; j++) {
                 if (newRelates[j].equals(current) ||
-                    newRelates[j].getValue().equals(current.getValue())) {
+                        newRelates[j].getValue().equals(current.getValue())) {
                     found = true;
                     break;
                 }

Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/base/SequenceMediator.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/base/SequenceMediator.java?view=diff&rev=523268&r1=523267&r2=523268
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/base/SequenceMediator.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/base/SequenceMediator.java Wed Mar 28 03:42:00 2007
@@ -69,20 +69,25 @@
      * @return as per standard mediator result
      */
     public boolean mediate(MessageContext synCtx) {
+        
         log.debug("Sequence mediator <" + (name == null ? "anonymous" : name) + "> :: mediate()");
+        
         boolean shouldTrace = shouldTrace(synCtx.getTracingState());
         if (key == null) {
             // Setting Required property to collect the sequence statistics
-            boolean isStatisticsEnable = (org.apache.synapse.Constants.STATISTICS_ON == statisticsEnable);
+            boolean isStatisticsEnable
+                    = (org.apache.synapse.Constants.STATISTICS_ON == statisticsEnable);
             if (isStatisticsEnable) {
-                StatisticsStack sequenceStack = (StatisticsStack) synCtx.getProperty(Constants.SEQUENCE_STATISTICS_STACK);
+                StatisticsStack sequenceStack
+                        = (StatisticsStack) synCtx.getProperty(Constants.SEQUENCE_STATISTICS_STACK);
                 if (sequenceStack == null) {
                     sequenceStack = new SequenceStatisticsStack();
                     synCtx.setProperty(Constants.SEQUENCE_STATISTICS_STACK, sequenceStack);
                 }
                 String seqName = (name == null ? "anonymous" : name);
                 boolean isFault =synCtx.getEnvelope().getBody().hasFault();
-                sequenceStack.put(seqName, System.currentTimeMillis(), !synCtx.isResponse(), isStatisticsEnable,isFault);
+                sequenceStack.put(seqName,System.currentTimeMillis(),
+                        !synCtx.isResponse(), isStatisticsEnable,isFault);
             }
             try {
                 if (shouldTrace) {
@@ -91,6 +96,7 @@
 
                 // push the errorHandler sequence into the current message as the fault handler
                 if (errorHandler != null) {
+                    log.debug("Setting the onError handler for the sequence");
                     synCtx.pushFaultHandler(
                         new MediatorFaultHandler(synCtx.getSequence(errorHandler)));
                 }

Modified: webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/transform/XSLTMediator.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/transform/XSLTMediator.java?view=diff&rev=523268&r1=523267&r2=523268
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/transform/XSLTMediator.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/transform/XSLTMediator.java Wed Mar 28 03:42:00 2007
@@ -59,26 +59,35 @@
     private static final Log log = LogFactory.getLog(XSLTMediator.class);
     private static final Log trace = LogFactory.getLog(Constants.TRACE_LOGGER);
 
-    /** The property key/name which refers to the XSLT to be used for the transformation */
+    /**
+     * The property key/name which refers to the XSLT to be used for the transformation
+     */
     private String xsltKey = null;
 
-    /** The (optional) XPath expression which yeilds the source element for a transformation */
+    /**
+     * The (optional) XPath expression which yeilds the source element for a transformation
+     */
     private AXIOMXPath source = null;
 
-    /** Any parameters which should be passed into the XSLT transformation */
+    /**
+     * Any parameters which should be passed into the XSLT transformation
+     */
     private List properties = new ArrayList();
 
     /**
      * The Transformer instance used to perform XSLT transformations. This is not thread-safe
+     *
      * @see javax.xml.transform.Transformer
      */
     private Transformer transformer = null;
 
-    /** Lock used to ensure thread-safe creation and use of the above Transformer */
+    /**
+     * Lock used to ensure thread-safe creation and use of the above Transformer
+     */
     private final Object transformerLock = new Object();
 
     public static final String DEFAULT_XPATH = "//s11:Envelope/s11:Body/child::*[position()=1] | " +
-        "//s12:Envelope/s12:Body/child::*[position()=1]";
+            "//s12:Envelope/s12:Body/child::*[position()=1]";
 
     public XSLTMediator() {
         // create the default XPath
@@ -94,24 +103,30 @@
     /**
      * Transforms this message (or its element specified as the source) using the
      * given XSLT transformation
+     *
      * @param synCtx the current message where the transformation will apply
      * @return true always
      */
     public boolean mediate(MessageContext synCtx) {
-        log.debug("XSLT mediator mediate()");
-        boolean shouldTrace = shouldTrace(synCtx.getTracingState());
-        if (shouldTrace) {
-            trace.trace("Start : XSLT mediator");
-        }
-        log.debug("Performing XSLT transformation against property with key : " + xsltKey);
-        performXLST(synCtx,shouldTrace);
-        if (shouldTrace) {
-            trace.trace("Start : XSLT mediator");
+        try {
+            log.debug("XSLT mediator mediate()");
+            boolean shouldTrace = shouldTrace(synCtx.getTracingState());
+            if (shouldTrace) {
+                trace.trace("Start : XSLT mediator");
+            }
+            log.debug("Performing XSLT transformation against property with key : " + xsltKey);
+            performXLST(synCtx, shouldTrace);
+            if (shouldTrace) {
+                trace.trace("Start : XSLT mediator");
+            }
+            return true;
+        } catch (Exception e) {
+            handleException("Unable to do the transformation");
         }
-        return true;
+        return false;
     }
 
-    private void performXLST(MessageContext msgCtx,boolean shouldTrace) {
+    private void performXLST(MessageContext msgCtx, boolean shouldTrace) {
 
         Source transformSrc = null;
         ByteArrayOutputStream baosForTarget = new ByteArrayOutputStream();
@@ -131,7 +146,7 @@
             // create a byte array output stream and serialize the source node into it
             ByteArrayOutputStream baosForSource = new ByteArrayOutputStream();
             XMLStreamWriter xsWriterForSource = XMLOutputFactory.newInstance().
-                createXMLStreamWriter(baosForSource);
+                    createXMLStreamWriter(baosForSource);
 
             sourceNode.serialize(xsWriterForSource);
             transformSrc = new StreamSource(new ByteArrayInputStream(baosForSource.toByteArray()));
@@ -146,27 +161,27 @@
         // if the xsltKey refers to a dynamic property
         if (dp != null && dp.isDynamic()) {
             if (!dp.isCached() || dp.isExpired()) {
-                synchronized(transformerLock) {
+                synchronized (transformerLock) {
                     try {
                         transformer = TransformerFactory.newInstance().
-                            newTransformer(Util.getStreamSource(
-                                msgCtx.getConfiguration().getEntry(xsltKey)
-                            ));
+                                newTransformer(Util.getStreamSource(
+                                        msgCtx.getConfiguration().getEntry(xsltKey)
+                                ));
                     } catch (TransformerConfigurationException e) {
                         handleException("Error creating XSLT transformer using : " + xsltKey, e);
                     }
                 }
             }
 
-        // if the property is not a DynamicProperty, we will create a transformer only once
+            // if the property is not a DynamicProperty, we will create a transformer only once
         } else {
             if (transformer == null) {
-                synchronized(transformerLock) {
+                synchronized (transformerLock) {
                     try {
                         transformer = TransformerFactory.newInstance().
-                            newTransformer(
-                                Util.getStreamSource(
-                                msgCtx.getConfiguration().getEntry(xsltKey)));
+                                newTransformer(
+                                        Util.getStreamSource(
+                                                msgCtx.getConfiguration().getEntry(xsltKey)));
                     } catch (TransformerConfigurationException e) {
                         handleException("Error creating XSLT transformer using : " + xsltKey, e);
                     }
@@ -179,7 +194,7 @@
             transformer.transform(transformSrc, transformTgt);
 
             StAXOMBuilder builder = new StAXOMBuilder(
-                new ByteArrayInputStream(baosForTarget.toByteArray()));
+                    new ByteArrayInputStream(baosForTarget.toByteArray()));
             OMElement result = builder.getDocumentElement();
             if (shouldTrace) {
                 trace.trace("Transformation result : " + result.toString());
@@ -189,7 +204,7 @@
             }
 
             // replace the sourceNode with the result.
-            sourceNode.insertSiblingAfter( result );
+            sourceNode.insertSiblingAfter(result);
             sourceNode.detach();
 
         } catch (TransformerException e) {
@@ -217,7 +232,7 @@
                 return (OMNode) ((List) o).get(0);  // Always fetches *only* the first
             } else {
                 handleException("The evaluation of the XPath expression "
-                    + source + " must result in an OMNode");
+                        + source + " must result in an OMNode");
             }
         } catch (JaxenException e) {
             handleException("Error evaluating XPath " + source + " on message");



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