Author: hemapani
Date: Tue Jun 12 14:04:26 2007
New Revision: 546634

URL: http://svn.apache.org/viewvc?view=rev&rev=546634
Log:
fix https://issues.apache.org/jira/browse/AXIS2-1363

Modified:
    
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractInOutAsyncMessageReceiver.java

Modified: 
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractInOutAsyncMessageReceiver.java
URL: 
http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractInOutAsyncMessageReceiver.java?view=diff&rev=546634&r1=546633&r2=546634
==============================================================================
--- 
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractInOutAsyncMessageReceiver.java
 (original)
+++ 
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractInOutAsyncMessageReceiver.java
 Tue Jun 12 14:04:26 2007
@@ -18,6 +18,8 @@
 package org.apache.axis2.receivers;
 
 import org.apache.axis2.AxisFault;
+
+import org.apache.axis2.addressing.AddressingConstants;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.engine.AxisEngine;
 import org.apache.axis2.util.MessageContextBuilder;
@@ -33,7 +35,7 @@
     public abstract void invokeBusinessLogic(MessageContext inMessage,
                                              MessageContext outMessage) throws 
AxisFault;
 
-    public final void receive(final MessageContext messageCtx) {
+    public final void receive(final MessageContext messageCtx) throws 
AxisFault {
         final ServerCallback callback = new ServerCallback() {
             public void handleResult(MessageContext result) throws AxisFault {
                 AxisEngine.send(result);
@@ -47,31 +49,57 @@
                 AxisEngine.sendFault(faultContext);
             }
         };
-        Runnable theadedTask = new Runnable() {
-            public void run() {
+        
+                       
+        AsyncMessageReceiverWorker theadedTask = new 
AsyncMessageReceiverWorker(messageCtx,callback);
+               messageCtx.getEnvelope().build();
+               
+               
+               /**
+                * If this type of Message Reciecer is used without addressing, 
the condtions given in Jira 
+                * https://issues.apache.org/jira/browse/AXIS2-1363 would 
occuer(Both 202 accepted and 200 OK is written to the 
+                * output stream). To avoid it if addressing is not present we 
do not spawn a new thread. This will disapper when
+                * async message recivers are removed later
+                */
+               
+               if(messageCtx.getReplyTo() != null 
+                               && 
!AddressingConstants.Submission.WSA_ANONYMOUS_URL.equals(messageCtx.getReplyTo().getAddress())
+                               && 
!AddressingConstants.Final.WSA_ANONYMOUS_URL.equals(messageCtx.getReplyTo().getAddress())){
+                       
messageCtx.getConfigurationContext().getThreadPool().execute(theadedTask);
+               }else{
+                       theadedTask.run();
+               }
+    }
+    public class AsyncMessageReceiverWorker implements Runnable{
+       private MessageContext messageCtx;
+       private ServerCallback callback;
+       
+       public AsyncMessageReceiverWorker(MessageContext 
messageCtx,ServerCallback callback){
+               this.messageCtx = messageCtx;
+               this.callback = callback;
+       }
+       
+        public void run() {
+            try {
+                MessageContext newmsgCtx =
+                        
MessageContextBuilder.createOutMessageContext(messageCtx);
+                newmsgCtx.getOperationContext().addMessageContext(newmsgCtx);
+                ThreadContextDescriptor tc = setThreadContext(messageCtx);
+                try {
+                    invokeBusinessLogic(messageCtx, newmsgCtx);
+                } finally {
+                    restoreThreadContext(tc);
+                }
+                callback.handleResult(newmsgCtx);
+            } catch (AxisFault e) {
                 try {
-                    MessageContext newmsgCtx =
-                            
MessageContextBuilder.createOutMessageContext(messageCtx);
-                    
newmsgCtx.getOperationContext().addMessageContext(newmsgCtx);
-                    ThreadContextDescriptor tc = setThreadContext(messageCtx);
-                    try {
-                        invokeBusinessLogic(messageCtx, newmsgCtx);
-                    } finally {
-                        restoreThreadContext(tc);
-                    }
-                    callback.handleResult(newmsgCtx);
-                } catch (AxisFault e) {
-                    try {
-                        callback.handleFault(e);
-                    } catch (AxisFault axisFault) {
-                        log.error(e);
-                    }
+                    callback.handleFault(e);
+                } catch (AxisFault axisFault) {
                     log.error(e);
                 }
+                log.error(e);
             }
-        };
-
-        messageCtx.getEnvelope().build();
-        
messageCtx.getConfigurationContext().getThreadPool().execute(theadedTask);
-    }
+        }
+    };
+    
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to