2016-06-24 3 views
0

이 예외는 지정된 서비스가 실행되지 않는 경우에 일반적입니다. 그러나이 경우는 다릅니다. 통합 테스트를 위해 작성한 낙타 루트가 있습니다. 경로 자체 생산과 같은 환경에서 작업했지만, 테스트에서, 조롱 엔드 포인트가 호출되지 않고 경로 (단축)와 함께 실패를 http://localhost:9000/data/v2/users/17?projection=full을하지만 : 그 모의 듣고 주어진 URL에 응답했다 놀라게했다Apache camel jetty RestletOperationException 요청시 호출 요청시 restlet 끝점

java.net.SocketTimeoutException: Read timed out 
    at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_91] 
    at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) ~[na:1.8.0_91] 
    at java.net.SocketInputStream.read(SocketInputStream.java:170) ~[na:1.8.0_91] 
    at java.net.SocketInputStream.read(SocketInputStream.java:141) ~[na:1.8.0_91] 
    at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:160) ~[httpcore-4.4.1.jar:4.4.1] 
    ... 
    at org.restlet.ext.httpclient.internal.HttpMethodCall.sendRequest(HttpMethodCall.java:339) ~[org.restlet.ext.httpclient-2.3.5.jar:na] 
    at org.restlet.engine.adapter.ClientAdapter.commit(ClientAdapter.java:105) [org.restlet-2.3.5.jar:na] 
    at org.restlet.engine.adapter.HttpClientHelper.handle(HttpClientHelper.java:119) [org.restlet-2.3.5.jar:na] 
    at org.restlet.Client.handle(Client.java:153) [org.restlet-2.3.5.jar:na] 
    at org.restlet.Restlet.handle(Restlet.java:275) [org.restlet-2.3.5.jar:na] 
    at org.apache.camel.component.restlet.RestletProducer.process(RestletProducer.java:79) [camel-restlet-2.16.0.jar:2.16.0] 
    ... 
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_91] 
15:35:38.913 [qtp995381766-39] WARN o.e.jetty.servlet.ServletHandler - /data/v2/users/17 
org.apache.camel.RuntimeCamelException: org.eclipse.jetty.io.EofException: Early EOF 
    at org.apache.camel.http.common.HttpMessage.createBody(HttpMessage.java:68) ~[camel-http-common-2.16.0.jar:2.16.0] 
    at org.apache.camel.impl.MessageSupport.getBody(MessageSupport.java:41) ~[camel-core-2.16.0.jar:2.16.0] 
    at org.apache.camel.http.common.DefaultHttpBinding.readRequest(DefaultHttpBinding.java:97) ~[camel-http-common-2.16.0.jar:2.16.0] 
    .. 
Caused by: org.eclipse.jetty.io.EofException: Early EOF 
    at org.eclipse.jetty.server.HttpInput$3.noContent(HttpInput.java:506) ~[jetty-server-9.2.10.v20150310.jar:9.2.10.v20150310] 
    at org.eclipse.jetty.server.HttpInput.read(HttpInput.java:124) ~[jetty-server-9.2.10.v20150310.jar:9.2.10.v20150310] 
    at java.io.InputStream.read(InputStream.java:101) ~[na:1.8.0_91] 
    at org.apache.camel.util.IOHelper.copy(IOHelper.java:196) ~[camel-core-2.16.0.jar:2.16.0] 
    at org.apache.camel.util.IOHelper.copy(IOHelper.java:169) ~[camel-core-2.16.0.jar:2.16.0] 
    at org.apache.camel.util.IOHelper.copyAndCloseInput(IOHelper.java:218) ~[camel-core-2.16.0.jar:2.16.0] 
    at org.apache.camel.util.IOHelper.copyAndCloseInput(IOHelper.java:214) ~[camel-core-2.16.0.jar:2.16.0] 
    at org.apache.camel.http.common.HttpHelper.readResponseBodyFromInputStream(HttpHelper.java:244) ~[camel-http-common-2.16.0.jar:2.16.0] 
    at org.apache.camel.http.common.HttpHelper.readRequestBodyFromServletRequest(HttpHelper.java:195) ~[camel-http-common-2.16.0.jar:2.16.0] 
    at org.apache.camel.http.common.DefaultHttpBinding.parseBody(DefaultHttpBinding.java:492) ~[camel-http-common-2.16.0.jar:2.16.0] 
    at org.apache.camel.http.common.HttpMessage.createBody(HttpMessage.java:66) ~[camel-http-common-2.16.0.jar:2.16.0] 
    ... 23 common frames omitted 
15:35:38.949 [Restlet-167550865] ERROR o.a.c.processor.DefaultErrorHandler - Failed delivery for (MessageId: ID-nb-mensik-61516-1466775296892-0-3 on ExchangeId: ID-nb-mensik-61516-1466775296892-0-2). Exhausted after delivery attempt: 1 caught: org.apache.camel.component.restlet.RestletOperationException: Restlet operation failed invoking http://localhost:9000/data/v2/users/17?projection=full with statusCode: 1001 /n responseBody:HTTP/1.1 - Communication Error (1001) - The connector failed to complete the communication with the server 

org.apache.camel.component.restlet.RestletOperationException: Restlet operation failed invoking http://localhost:9000/data/v2/users/17?projection=full with statusCode: 1001 /n responseBody:HTTP/1.1 - Communication Error (1001) - The connector failed to complete the communication with the server 
    at org.apache.camel.component.restlet.RestletProducer.populateRestletProducerException(RestletProducer.java:232) ~[camel-restlet-2.16.0.jar:2.16.0] 
    at org.apache.camel.component.restlet.RestletProducer.process(RestletProducer.java:84) ~[camel-restlet-2.16.0.jar:2.16.0] 
    at org.apache.camel.component.restlet.RestletProducer.process(RestletProducer.java:98) ~[camel-restlet-2.16.0.jar:2.16.0] 
    at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:141) [camel-core-2.16.0.jar:2.16.0] 
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460) [camel-core-2.16.0.jar:2.16.0] 

테스트 도중 어떤 반응도 얻지 못했습니다.

자세한 설명 : 임베디드 부두에서 각각 실행되는 세 개의 모듈 (A, B 및 C라고 함)이 있습니다. 나는 통합 테스트 모듈 A로 커버하고 싶다. 따라서 모듈 A에서 모듈 B와 C로 모든 호출을 모의 할 필요가 있었다. 나는 정확하게 B의 모의 호출을 받았지만 모의 C는 호출되지 않았으며 위의 예외를 제외하고는 테스트가 실패했다. 시험 도중 C로 조롱 된 종단점 (테스트로는 도달 할 수없는)은 같은 머리글 등으로 컬 호출을 통해 도달 할 수있었습니다.

답변

0

나머지 http 헤더를 제대로 제거하지 않았기 때문에 이상한 예외가 발생했습니다. 휴식 후 경로에서 .removeHeaders("org.restlet.http.headers") // remove HTTP headers from incoming request (헤더를 제거하는 것은이 모듈에서 수행되기 때문에)

 authorizationServiceMock.whenExchangeReceived(1, 
        exchange -> { 
         assertEquals(exchange.getIn().getHeader(HTTP_PATH, String.class), "/authorization/Bearer MagicToken"); 
         exchange.getIn().setHeader(CONTENT_TYPE, APPLICATION_JSON); 
         exchange.getIn().removeHeaders(ATTRIBUTE_HEADERS); 
         exchange.getIn().setBody(objectMapper.writeValueAsBytes(new UserToken("MagicToken", 17L))); 
        }); 

하지만이 모듈 B의 조롱 응답 헤더를 제거 추가하려고 B. 을 모듈 호출 그것은 도움이되지 않았다.

그래서 모듈 B에 대한 호출 후 헤더 제거로 모듈 A의 "생산 경로"를 수정해야했습니다. 그런 다음 조롱 된 모듈 C가 문제없이 호출되었습니다.

... 더 많은 정보 예외가 throw 된 경우에만 : (