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();