Hello list,
I using Apache Camel 2.2.0-fuse-01-00 and I have trouble to run my four unit
tests. If I run each test separate (annotate the other tests with @Ignore or
run only one test method in my IDE) all tests succeed. But if I run all
tests together (one test after the others) with Maven or in my IDE, I
receive a java.net.SocketTimeoutException. Unfortunately I have no idea,
where the side effect is.
My test looks as following:
public class IncommingRouteTest extends CamelSpringTestSupport {
private Person client;
@EndpointInject(uri = "mock:result")
private MockEndpoint queueEndpoint;
@EndpointInject(uri = "mock:error")
private MockEndpoint errorEndpoint;
@Before
public void setUp() throws Exception {
disableJMX();
super.setUp();
URL wsdlURL =
IncommingRouteTest.class.getClassLoader().getResource("META-INF/wlsi/person-non-wrapper.wsdl");
PersonService ss = new PersonService(wsdlURL, new QName("
http://camel.apache.org/non-wrapper", "PersonService"));
client = ss.getSoap();
}
@Test
public void process() throws Exception {
queueEndpoint.expectedMessageCount(1);
queueEndpoint.expectedBodiesReceived("com.awl.wlsi.example.eai.service.types.GetPerson[personId='1']");
errorEndpoint.expectedMessageCount(0);
GetPerson request = new GetPerson();
request.setPersonId("1");
GetPersonResponse response = client.getPerson(request);
assertEquals("1", response.getPersonId());
assertEquals("Christian Mueller", response.getName());
assertEquals("123", response.getSsn());
queueEndpoint.assertIsSatisfied();
errorEndpoint.assertIsSatisfied();
}
@Test
public void processIrrecoverableExceptionForUnknowPerson() throws
Exception {
queueEndpoint.expectedMessageCount(1);
queueEndpoint.expectedBodiesReceived("com.awl.wlsi.example.eai.service.types.GetPerson[personId='?']");
errorEndpoint.expectedMessageCount(0);
GetPerson request = new GetPerson();
request.setPersonId("?");
try {
client.getPerson(request);
fail("We expect to get the UnknowPersonFault here");
} catch (UnknownPersonFault fault) {
// We expect to get fault here
assertEquals("Receive an invalid personId: '?'",
fault.getMessage());
}
queueEndpoint.assertIsSatisfied();
errorEndpoint.assertIsSatisfied();
}
@Test
public void processRecoverableExceptionForUnknowPerson() throws
Exception {
queueEndpoint.expectedMessageCount(1);
queueEndpoint.expectedBodiesReceived("com.awl.wlsi.example.eai.service.types.GetPerson[personId='5']");
errorEndpoint.expectedMessageCount(1);
GetPerson request = new GetPerson();
request.setPersonId("5");
try {
client.getPerson(request);
fail("We expect to get the SOAPFaultException here");
} catch (SOAPFaultException fault) {
// We expect to get fault here
assertEquals("Recoverable exception", fault.getMessage());
}
queueEndpoint.assertIsSatisfied();
errorEndpoint.assertIsSatisfied();
}
@Test
public void processInvalidRequest() throws Exception {
queueEndpoint.expectedMessageCount(0);
errorEndpoint.expectedMessageCount(0);
GetPerson request = new GetPerson();
request.setPersonId("tooooooooooooooooooooooo long");
try {
client.getPerson(request);
fail("We expect to get a message schema validation
failure");
} catch (Exception ex) {
// We expect to get fault here
assertEquals("Unmarshalling Error: cvc-maxLength-valid: Value
'tooooooooooooooooooooooo long' with length = '29' is not facet-valid with
respect to maxLength '10' for type 'personId'. ", ex.getMessage());
}
queueEndpoint.assertIsSatisfied();
errorEndpoint.assertIsSatisfied();
}
@Override
protected ClassPathXmlApplicationContext createApplicationContext() {
return new ClassPathXmlApplicationContext(new
String[]{"META-INF/spring/bundle-context.xml",
"META-INF/spring/bundle-context-test.xml"});
}
@Override
protected int getExpectedRouteCount() {
return 0;
}
}
stack trace:
2010-07-05 16:07:40,963 [main ] DEBUG
DefaultCamelContext - ... Routes started
2010-07-05 16:07:40,963 [main ] INFO
DefaultCamelContext - Started 3 routes
2010-07-05 16:07:40,963 [main ] INFO
DefaultCamelContext - Apache Camel 2.2.0-fuse-01-00
(CamelContext:camelContext) started
2010-07-05 16:07:40,963 [main ] DEBUG
IncommingRouteTest - Camel Routes:
[EventDrivenConsumerRoute[Endpoint[
http://localhost:8181/Services/PersonService] ->
Instrumentation:route[UnitOfWork(Channel[Multicast[[Channel[sendTo(Endpoint[direct://queue])],
Channel[sendTo(Endpoint[direct://processor])]]]])]],
EventDrivenConsumerRoute[Endpoint[direct://queue] ->
Instrumentation:route[UnitOfWork(pipeline[channel[com.awl.wlsi.example.eai.in.incommingrout...@b3a5d1],
Channel[sendTo(Endpoint[mock://result] InOnly)]])]],
EventDrivenConsumerRoute[Endpoint[direct://processor] ->
Instrumentation:route[UnitOfWork(channel[com.awl.wlsi.example.eai.in.personproces...@139ef3a
])]]]
2010-07-05 16:07:40,963 [main ] TRACE
CamelBeanPostProcessor - Camel bean processing before initialization
for bean: this
2010-07-05 16:07:40,963 [main ] TRACE
DefaultCamelContext - Getting endpoint with uri: mock://result
2010-07-05 16:07:40,963 [main ] TRACE
DefaultCamelContext - Getting endpoint with uri: mock://error
2010-07-05 16:07:40,963 [main ] DEBUG
IncommingRouteTest - Using created route builder: Routes: []
2010-07-05 16:07:40,963 [main ] DEBUG
DefaultCamelContext - Adding routes from builder: Routes: []
2010-07-05 16:07:40,963 [main ] DEBUG
IncommingRouteTest - Routing Rules are:
[EventDrivenConsumerRoute[Endpoint[
http://localhost:8181/Services/PersonService] ->
Instrumentation:route[UnitOfWork(Channel[Multicast[[Channel[sendTo(Endpoint[direct://queue])],
Channel[sendTo(Endpoint[direct://processor])]]]])]],
EventDrivenConsumerRoute[Endpoint[direct://queue] ->
Instrumentation:route[UnitOfWork(pipeline[channel[com.awl.wlsi.example.eai.in.incommingrout...@b3a5d1],
Channel[sendTo(Endpoint[mock://result] InOnly)]])]],
EventDrivenConsumerRoute[Endpoint[direct://processor] ->
Instrumentation:route[UnitOfWork(channel[com.awl.wlsi.example.eai.in.personproces...@139ef3a
])]]]
2010-07-05 16:07:40,963 [main ] DEBUG
IncommingRouteTest - Routing Rules are:
[EventDrivenConsumerRoute[Endpoint[
http://localhost:8181/Services/PersonService] ->
Instrumentation:route[UnitOfWork(Channel[Multicast[[Channel[sendTo(Endpoint[direct://queue])],
Channel[sendTo(Endpoint[direct://processor])]]]])]],
EventDrivenConsumerRoute[Endpoint[direct://queue] ->
Instrumentation:route[UnitOfWork(pipeline[channel[com.awl.wlsi.example.eai.in.incommingrout...@b3a5d1],
Channel[sendTo(Endpoint[mock://result] InOnly)]])]],
EventDrivenConsumerRoute[Endpoint[direct://processor] ->
Instrumentation:route[UnitOfWork(channel[com.awl.wlsi.example.eai.in.personproces...@139ef3a
])]]]
05.07.2010 16:07:40
org.apache.cxf.service.factory.ReflectionServiceFactoryBean
buildServiceFromWSDL
INFO: Creating Service
{http://camel.apache.org/non-wrapper}PersonServicefrom WSDL:
file:/D:/workspaceWLSI/wlsi/examples/wlsi-example-eai/wlsi-example-eai-incomming/target/classes/META-INF/wlsi/person-non-wrapper.wsdl
05.07.2010 16:08:41 org.apache.cxf.phase.PhaseInterceptorChain
doDefaultLogging
WARNUNG: Interceptor for {
http://camel.apache.org/non-wrapper}PersonService#{http://camel.apache.org/non-wrapper}GetPersonhas
thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Could not send Message.
at
org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:484)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:310)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:262)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
at
org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124)
at $Proxy51.getPerson(Unknown Source)
at
com.awl.wlsi.example.eai.in.IncommingRouteTest.process(IncommingRouteTest.java:50)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
at
org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
at
org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
at
org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
at
org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
at
org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
at
org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
at
org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
at
org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.net.SocketTimeoutException: SocketTimeoutException invoking
http://localhost:8181/Services/PersonService: Read timed out
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:2011)
at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1992)
at
org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:640)
at
org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
... 30 more
Caused by: java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:766)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
at
sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1072)
at
java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:373)
at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:2110)
at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:2087)
at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1985)
... 33 more
2010-07-05 16:08:41,497 [main ] DEBUG
IncommingRouteTest - tearDown test
2010-07-05 16:08:41,497 [main ] TRACE
ServiceHelper - Stopping service
org.apache.camel.impl.producerca...@89949a
Any idea? I could also provide my other code, if it's required...
Thanks in advance,
Christian