Camel CXF Junit 测试失败,出现 404
Camel CXF Junit Testing failing with 404
我正在尝试对我的骆驼路线进行单元测试,在成功调用路线后我从测试代码中得到了 404,这意味着我无法从测试中读取响应,总是抛出 404 not found
这是我的测试代码
final Exchange send = template.send("cxfrs://http://localhost:9001/v1/core/handshake", new Processor() {
public void process(Exchange exchange) throws Exception {
exchange.setPattern(ExchangePattern.OutOnly);
Message inMessage = exchange.getIn();
// setupDestinationURL(inMessage);
final String uuid = UUID.randomUUID().toString().replace("-", "");
System.out.println("uuid = " + uuid);
final GenerateTestHeaders headerGenerator = new GenerateTestHeaders();
final Map<String, Object> outboundHeaderMap = headerGenerator.getOutboundHeaderMap(API_KEY, ACCESS_ID, PRIVATE_ACCESS_KEY, "utf-8", "POST", "2016-08-31T10:40:55.979-0400", uuid);
// set a customer header
inMessage.setHeaders(outboundHeaderMap);
// using the http central client API
inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_USING_HTTP_API, Boolean.TRUE);
inMessage.setHeader("HOST", "localhost:9001");
// set the Http method
inMessage.setHeader(Exchange.HTTP_METHOD, "POST");
// set the operation name
inMessage.setHeader(CxfConstants.OPERATION_NAME, "handshake");
inMessage.setHeader(Exchange.ACCEPT_CONTENT_TYPE, "application/json");
// set the relative path
// inMessage.setHeader(Exchange.HTTP_PATH, "/IMP/v1/core/handshake");
// Specify the response class , cxfrs will use InputStream as the response object type
inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_RESPONSE_CLASS, HandshakeResponse.class);
// since we use the Get method, so we don't need to set the message body
inMessage.setBody(null);
}
});
我的路线定义如下
<cxf:rsServer id="coreEndPoint" address="http://localhost:9001/v1/core" staticSubresourceResolution="true"
serviceClass="com.incomm.imp.neo.core.incoming.Framework"
loggingFeatureEnabled="true" loggingSizeLimit="20">
<cxf:providers>
<bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider">
</bean>
</cxf:providers>
<cxf:inInterceptors>
<ref bean="loggingInInterceptor"></ref>
</cxf:inInterceptors>
<cxf:outInterceptors>
<ref bean="loggingOutInterceptor"></ref>
</cxf:outInterceptors>
<cxf:features >
<ref bean="swagger2Feature"></ref>
</cxf:features>
</cxf:rsServer>
因此调用了我的路由,日志记录拦截器记录了带有负载的 200 成功,但是当返回生产者模板时它有 404 异常。
知道我做错了什么吗?
在进一步的调试中意识到它必须与 Jetty 服务器的处理方式有关 internally.So 与 Camel Apache 示例进行了交叉比较。修改它并稍微玩了一下,长话短说,主要区别在于 POM
我想失败的原因是 POM 中的依赖项。
<!-- http client tests -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-http</artifactId>
<scope>test</scope>
<version>${camel-version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jetty</artifactId>
<version>${camel-version}</version>
<!-- use the same version as your Camel core version-->
</dependency>
<!-- Test Dependencies -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core-xml</artifactId>
<scope>test</scope>
<version>${camel-version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-test</artifactId>
<version>${camel-version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-test-spring</artifactId>
<version>${camel-version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-ws-rm</artifactId>
<version>${cxf-version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<scope>test</scope>
<version>4.5.2</version>
</dependency>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymockclassextension</artifactId>
<scope>test</scope>
<version>3.2</version>
</dependency>
我添加了这些,它开始工作了。我得看看是哪个
那个魔法,现在我很好。
我正在尝试对我的骆驼路线进行单元测试,在成功调用路线后我从测试代码中得到了 404,这意味着我无法从测试中读取响应,总是抛出 404 not found
这是我的测试代码
final Exchange send = template.send("cxfrs://http://localhost:9001/v1/core/handshake", new Processor() {
public void process(Exchange exchange) throws Exception {
exchange.setPattern(ExchangePattern.OutOnly);
Message inMessage = exchange.getIn();
// setupDestinationURL(inMessage);
final String uuid = UUID.randomUUID().toString().replace("-", "");
System.out.println("uuid = " + uuid);
final GenerateTestHeaders headerGenerator = new GenerateTestHeaders();
final Map<String, Object> outboundHeaderMap = headerGenerator.getOutboundHeaderMap(API_KEY, ACCESS_ID, PRIVATE_ACCESS_KEY, "utf-8", "POST", "2016-08-31T10:40:55.979-0400", uuid);
// set a customer header
inMessage.setHeaders(outboundHeaderMap);
// using the http central client API
inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_USING_HTTP_API, Boolean.TRUE);
inMessage.setHeader("HOST", "localhost:9001");
// set the Http method
inMessage.setHeader(Exchange.HTTP_METHOD, "POST");
// set the operation name
inMessage.setHeader(CxfConstants.OPERATION_NAME, "handshake");
inMessage.setHeader(Exchange.ACCEPT_CONTENT_TYPE, "application/json");
// set the relative path
// inMessage.setHeader(Exchange.HTTP_PATH, "/IMP/v1/core/handshake");
// Specify the response class , cxfrs will use InputStream as the response object type
inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_RESPONSE_CLASS, HandshakeResponse.class);
// since we use the Get method, so we don't need to set the message body
inMessage.setBody(null);
}
});
我的路线定义如下
<cxf:rsServer id="coreEndPoint" address="http://localhost:9001/v1/core" staticSubresourceResolution="true"
serviceClass="com.incomm.imp.neo.core.incoming.Framework"
loggingFeatureEnabled="true" loggingSizeLimit="20">
<cxf:providers>
<bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider">
</bean>
</cxf:providers>
<cxf:inInterceptors>
<ref bean="loggingInInterceptor"></ref>
</cxf:inInterceptors>
<cxf:outInterceptors>
<ref bean="loggingOutInterceptor"></ref>
</cxf:outInterceptors>
<cxf:features >
<ref bean="swagger2Feature"></ref>
</cxf:features>
</cxf:rsServer>
因此调用了我的路由,日志记录拦截器记录了带有负载的 200 成功,但是当返回生产者模板时它有 404 异常。
知道我做错了什么吗?
在进一步的调试中意识到它必须与 Jetty 服务器的处理方式有关 internally.So 与 Camel Apache 示例进行了交叉比较。修改它并稍微玩了一下,长话短说,主要区别在于 POM
我想失败的原因是 POM 中的依赖项。
<!-- http client tests -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-http</artifactId>
<scope>test</scope>
<version>${camel-version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jetty</artifactId>
<version>${camel-version}</version>
<!-- use the same version as your Camel core version-->
</dependency>
<!-- Test Dependencies -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core-xml</artifactId>
<scope>test</scope>
<version>${camel-version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-test</artifactId>
<version>${camel-version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-test-spring</artifactId>
<version>${camel-version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-ws-rm</artifactId>
<version>${cxf-version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<scope>test</scope>
<version>4.5.2</version>
</dependency>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymockclassextension</artifactId>
<scope>test</scope>
<version>3.2</version>
</dependency>
我添加了这些,它开始工作了。我得看看是哪个 那个魔法,现在我很好。