首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对apache camel cxfrs路由进行单元测试?

如何对apache camel cxfrs路由进行单元测试?
EN

Stack Overflow用户
提问于 2017-11-30 05:47:49
回答 0查看 797关注 0票数 0

我有一个有效的cxfrs路由。我可以使用带有json对象的SoapUi访问rest服务并获得响应。

我想写单元测试,我想使用CamelTestSupport。我的routebuilder configure()方法看起来像这样:

代码语言:javascript
复制
    from(cxfrsEndpoint)
        .recipientList(simple("direct:${header.operationName}"))
        .setHeader(Exchange.CONTENT_LENGTH, simple("-1"));

    from("direct:submitRequest")
        .bean("responseBean", "checkJson")
        .bean("responseBean", "createSuccessResponse");

当我用适当的json字符串点击来自SoapUi (http://localhost:8181/cxf/myContext/submitRequest)的url作为帖子时,我得到了一个“成功”的json返回。凉爽的。

在我的单元测试中,我创建了一个被覆盖的createRouteBuilder方法:

代码语言:javascript
复制
@Override
protected RouteBuilder createRouteBuilder() {

    MyRouteBuilder myRouteBuilder = new MyRouteBuilder();
    myRouteBuilder.setCxfrsEndpoint("direct:start");
    return myRouteBuilder;
}

然后我的单元测试(我想)会是这样的:

代码语言:javascript
复制
@Test
public void thisIsATest() throws Exception {

  MyRequest myRequest = new MyRequest();
  request.setSomeProperty("Some property value");

  ObjectMapper objectMapper = new ObjectMapper();
  String goodJsonRequest = objectMapper.writeValueAsString(request);

  String response = (String) template.requestBodyAndHeader(START_POINT, goodJsonRequest, "operationName", "submitRequest");
  assertNotNull(response);
  //Omitted: further assertions for content of the response json
}

好吧,当我执行单元测试时,我得到了一个解组异常,原因是:

代码语言:javascript
复制
Caused by: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character '{' (code 123) in prolog; expected '<'
  at [row,col {unknown-source}]: [1,1]
  at com.ctc.wstx.sr.StreamScanner.throwUnexpectedChar(StreamScanner.java:647)
  at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:2054)
  at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1131)
  at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:164)
  at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:415)
... 74 more

它不喜欢我的json字符串。什么是真正的服务接收?

在实际的路由上,我在blueprint.xml中的端点上启用了日志记录,如下所示:

代码语言:javascript
复制
<!-- RouteBuilder declarations -->
<bean id="myRouteBuilder" class="com.mycompany.MyRouteBuilder">
  <property name="cxfrsEndpoint"  value="cxfrs:bean:cxfrsEndpoint?bindingStyle=SimpleConsumer&amp;loggingFeatureEnabled=true" />
</bean>

我在日志中看到的json字符串看起来与我通过template.requestBodyAndHeader(...)发送的json字符串没有什么不同。

这里我遗漏了什么,或者我做错了什么?

谢谢!

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47562400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档