You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2008/09/05 10:10:25 UTC

svn commit: r692378 - in /servicemix/components/bindings/servicemix-http/trunk/src: main/java/org/apache/servicemix/http/endpoints/ test/java/org/apache/servicemix/http/

Author: gnodet
Date: Fri Sep  5 01:10:25 2008
New Revision: 692378

URL: http://svn.apache.org/viewvc?rev=692378&view=rev
Log:
SM-1538: HTTP Provider does not return any JBI response (out/fault/error message) when the connection is established and in a while broken

Modified:
    servicemix/components/bindings/servicemix-http/trunk/src/main/java/org/apache/servicemix/http/endpoints/DefaultHttpProviderMarshaler.java
    servicemix/components/bindings/servicemix-http/trunk/src/main/java/org/apache/servicemix/http/endpoints/HttpProviderEndpoint.java
    servicemix/components/bindings/servicemix-http/trunk/src/main/java/org/apache/servicemix/http/endpoints/HttpProviderMarshaler.java
    servicemix/components/bindings/servicemix-http/trunk/src/main/java/org/apache/servicemix/http/endpoints/HttpSoapProviderMarshaler.java
    servicemix/components/bindings/servicemix-http/trunk/src/test/java/org/apache/servicemix/http/ProviderEndpointTest.java

Modified: servicemix/components/bindings/servicemix-http/trunk/src/main/java/org/apache/servicemix/http/endpoints/DefaultHttpProviderMarshaler.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-http/trunk/src/main/java/org/apache/servicemix/http/endpoints/DefaultHttpProviderMarshaler.java?rev=692378&r1=692377&r2=692378&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-http/trunk/src/main/java/org/apache/servicemix/http/endpoints/DefaultHttpProviderMarshaler.java (original)
+++ servicemix/components/bindings/servicemix-http/trunk/src/main/java/org/apache/servicemix/http/endpoints/DefaultHttpProviderMarshaler.java Fri Sep  5 01:10:25 2008
@@ -214,4 +214,8 @@
         }
     }
 
+    public void handleException(MessageExchange exchange, SmxHttpExchange httpExchange, Throwable ex) {
+        exchange.setError((Exception)ex);
+    }
+
 }

Modified: servicemix/components/bindings/servicemix-http/trunk/src/main/java/org/apache/servicemix/http/endpoints/HttpProviderEndpoint.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-http/trunk/src/main/java/org/apache/servicemix/http/endpoints/HttpProviderEndpoint.java?rev=692378&r1=692377&r2=692378&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-http/trunk/src/main/java/org/apache/servicemix/http/endpoints/HttpProviderEndpoint.java (original)
+++ servicemix/components/bindings/servicemix-http/trunk/src/main/java/org/apache/servicemix/http/endpoints/HttpProviderEndpoint.java Fri Sep  5 01:10:25 2008
@@ -232,16 +232,17 @@
         }
     }
 
-    protected void handleConnectionFailed(Throwable throwable, MessageExchange exchange) {
+    protected void handleException(SmxHttpExchange httpExchange, MessageExchange exchange, Throwable ex)  {
         try {
-            Exception e;
-            if (throwable instanceof Exception) {
-                e = (Exception) throwable;
+            marshaler.handleException(exchange, httpExchange, ex);
+            boolean txSync = exchange.getStatus() == ExchangeStatus.ACTIVE
+                             && exchange.isTransacted()
+                            && Boolean.TRUE.equals(exchange.getProperty(JbiConstants.SEND_SYNC));
+            if (txSync) {
+                sendSync(exchange);
             } else {
-                e = new Exception(throwable);
+                send(exchange);
             }
-            exchange.setError(e);
-            send(exchange);
         } catch (Exception e) {
             logger.warn("Unable to send back exchange in error", e);
         }
@@ -317,11 +318,11 @@
         }
 
         protected void onConnectionFailed(Throwable throwable) {
-            handleConnectionFailed(throwable, jbiExchange);
+            handleException(this, jbiExchange, throwable);
         }
 
         protected void onException(Throwable throwable) {
-            throw new RuntimeException(throwable);
+            handleException(this, jbiExchange, throwable);
         }
     }
 

Modified: servicemix/components/bindings/servicemix-http/trunk/src/main/java/org/apache/servicemix/http/endpoints/HttpProviderMarshaler.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-http/trunk/src/main/java/org/apache/servicemix/http/endpoints/HttpProviderMarshaler.java?rev=692378&r1=692377&r2=692378&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-http/trunk/src/main/java/org/apache/servicemix/http/endpoints/HttpProviderMarshaler.java (original)
+++ servicemix/components/bindings/servicemix-http/trunk/src/main/java/org/apache/servicemix/http/endpoints/HttpProviderMarshaler.java Fri Sep  5 01:10:25 2008
@@ -34,4 +34,8 @@
 
     void handleResponse(MessageExchange exchange,
                         SmxHttpExchange httpExchange) throws Exception;
+
+    void handleException(MessageExchange exchange,
+                         SmxHttpExchange httpExchange, Throwable ex);
+
 }

Modified: servicemix/components/bindings/servicemix-http/trunk/src/main/java/org/apache/servicemix/http/endpoints/HttpSoapProviderMarshaler.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-http/trunk/src/main/java/org/apache/servicemix/http/endpoints/HttpSoapProviderMarshaler.java?rev=692378&r1=692377&r2=692378&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-http/trunk/src/main/java/org/apache/servicemix/http/endpoints/HttpSoapProviderMarshaler.java (original)
+++ servicemix/components/bindings/servicemix-http/trunk/src/main/java/org/apache/servicemix/http/endpoints/HttpSoapProviderMarshaler.java Fri Sep  5 01:10:25 2008
@@ -125,6 +125,11 @@
         // TODO: Retrieve headers ? 
     }
 
+    public void handleException(MessageExchange exchange, SmxHttpExchange httpExchange, Throwable ex) {
+        exchange.setError((Exception)ex);
+    }
+
+
     protected InterceptorChain getChain(Phase phase) {
         InterceptorChain chain = chains.get(phase);
         if (chain == null) {

Modified: servicemix/components/bindings/servicemix-http/trunk/src/test/java/org/apache/servicemix/http/ProviderEndpointTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-http/trunk/src/test/java/org/apache/servicemix/http/ProviderEndpointTest.java?rev=692378&r1=692377&r2=692378&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-http/trunk/src/test/java/org/apache/servicemix/http/ProviderEndpointTest.java (original)
+++ servicemix/components/bindings/servicemix-http/trunk/src/test/java/org/apache/servicemix/http/ProviderEndpointTest.java Fri Sep  5 01:10:25 2008
@@ -17,6 +17,9 @@
 package org.apache.servicemix.http;
 
 import java.util.concurrent.atomic.AtomicReference;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.io.IOException;
 
 import javax.jbi.messaging.InOut;
 import javax.jbi.messaging.ExchangeStatus;
@@ -202,6 +205,59 @@
         assertEquals(ExchangeStatus.ERROR, me.getStatus());
     }
 
+    public void testSendProblemWithServerDying() throws Exception {
+        HttpComponent http = new HttpComponent();
+
+        HttpSoapProviderEndpoint ep1 = new HttpSoapProviderEndpoint();
+        ep1.setService(new QName("http://servicemix.apache.org/samples/wsdl-first", "PersonService"));
+        ep1.setEndpoint("soap");
+        ep1.setWsdl(new ClassPathResource("person.wsdl"));
+        ep1.setValidateWsdl(false); // TODO: Soap 1.2 not handled yet
+        ep1.setUseJbiWrapper(true);
+
+        http.addEndpoint(ep1);
+        container.activateComponent(http, "http");
+
+        container.start();
+
+        new Thread() {
+            public void run() {
+                ServerSocket ss = null;
+                try {
+                    ss = new ServerSocket(8192);
+                    Socket s = ss.accept();
+                    Thread.sleep(50);
+                    s.close();
+                } catch (Throwable t) {
+                    t.printStackTrace();
+                } finally {
+                    try {
+                        ss.close();
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }.start();
+
+        ServiceMixClient client = new DefaultServiceMixClient(container);
+        InOut me = client.createInOutExchange();
+        me.setService(new QName("http://servicemix.apache.org/samples/wsdl-first", "PersonService"));
+        me.setOperation(new QName("http://servicemix.apache.org/samples/wsdl-first", "GetPerson"));
+        me.getInMessage().setContent(new StringSource(
+                                "<jbi:message xmlns:jbi=\"http://java.sun.com/xml/ns/jbi/wsdl-11-wrapper\""
+                             +  "             xmlns:msg=\"http://servicemix.apache.org/samples/wsdl-first/types\" "
+                             +  "             name=\"Hello\" "
+                             +  "             type=\"msg:HelloRequest\" "
+                             +  "             version=\"1.0\">"
+                             +  "  <jbi:part>"
+                             +  "    <msg:GetPerson><msg:personId>id</msg:personId></msg:GetPerson>"
+                             +  "  </jbi:part>"
+                             +  "</jbi:message>"));
+        client.sendSync(me);
+        assertEquals(ExchangeStatus.ERROR, me.getStatus());
+    }
+
     public void testSendProblemWith404Html() throws Exception {
         HttpComponent http = new HttpComponent();