【问题标题】:Camel Exchange body set as xml rather than POJO ObjectCamel Exchange 正文设置为 xml 而不是 POJO 对象
【发布时间】:2015-07-09 17:42:50
【问题描述】:

我有一个简单的 Camel Route,它接收传入消息,然后调用处理器,处理器将主体更改为 Java 对象,并通过 CXF-SOAP 将其发送回客户端。

路线如下:

@Component
public class DcToAspResponseRoute extends AspRouteBuilder {

  @Autowired
  DcToAspResponseProcessor processor;

  @Override
  public void configure() throws Exception {
    final RouteDefinition routeDefinition = createRouteDefinition("{{asp.generic.route}}",
        RouteId.DC_TO_ASP_RESPONSE_ROUTE.getRouteId());

    routeDefinition
      .process(processor)
  }
}

处理器在下面:

@Component
public class DcToAspResponseProcessor implements Processor {
  @Autowired
  // protected for unit testing
  protected ObjectFactory objectFactory;

  @Override
  public void process(Exchange exchange) throws Exception {
    Response response = objectFactory.createResponse();
    response.setResponse(ResponseType.SUCCESS);

    exchange.getIn().setBody(response, Response.class);
  }
}

我的问题出现在网上:

exchange.getIn().setBody(response, Response.class);

当我尝试将上面实例化的 POJO Java 对象设置到主体上而不是将其设置为 Java POJO 对象到交换主体上时,POJO 将转换为 XML 格式,如下所示:

Exchange[Message: <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Response xmlns="http://xxx.yyy.zzz/2008">
    <response>Success</response>
</Response>
]

由于这种转换,我相信当 CXF 尝试从交换中编组一个 SOAP 响应时,它意识到这是一个“无效”的主体并忽略它,因此将我返回到空主体 SOAP 响应而不是填充响应之下:

    <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
   <soap:Body/>
</soap:Envelope>

谁能帮帮我?我失去了想法!非常感谢任何帮助。

【问题讨论】:

    标签: java xml web-services soap cxf


    【解决方案1】:

    希望这将在未来对任何人有所帮助...事实证明,这是一个导致此行为降级到 CXF-v3.1.0 的错误,现在它可以正常工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 2022-08-24
      相关资源
      最近更新 更多