当前位置: 首页 > 知识库问答 >
问题:

Camel Exchange正文设置为xml而不是POJO对象

杜河
2023-03-14

我有一个简单的驼峰路由,它接收传入消息,然后调用处理器,处理器将主体更改为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对象设置到主体上,而不是将其设置为exchange主体上的Java POJO对象时,POJO将转换为it XML格式,如下所示:

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

由于这种转换,我相信当CXF试图从exchange中整理出SOAP响应时,它会意识到这是一个“无效”的主体,并忽略它,因此返回到空主体SOAP响应下面,而不是填充响应:

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

有人能帮我吗?我对想法迷路了!非常感谢您的帮助。

共有1个答案

符正信
2023-03-14

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

 类似资料:
  • 问题内容: 使用jersey jersey.java.net当URI中没有接受标头或.xml后缀时,如何将JSON设置为默认序列化而不是XML? 问题答案: 您可以在@Produces批注中为每种媒体类型分配质量索引。如果可以同时允许XML和JSON,则可以执行以下操作以使Jersey偏爱JSON:

  • 我有一堆XML文档(源),需要将它们转换为具有不同结构(目标)的POJO。我的第一个明显的想法是使用JAXB和XSLT的组合。然而,在一些问题上,我不确定这是否合适。 我无法访问源的XSD。 我不需要目标作为XML结构,而只需要作为POJOs。 然后我想创建一个映射表,比如。 然而,这将导致大量“映射”代码,特别是在涉及复杂数据类型的情况下。 你对我如何实施这一点有什么建议吗?

  • 问题内容: 是否有任何理由在属性文件上使用XML进行Log4J配置? 问题答案: 在此博客中,对这两种方法的优点进行了有趣的讨论。以下部分是该博客的引文: 可以通过属性文件或XML文件定义属性。Log4j查找名为log4j.xml的文件,然后查找名为log4j.properties的文件。 两者都必须放在src文件夹中 。 该属性文件比XML文件更详细。XML还要求将log4j.dtd放置在源文件

  • 问题内容: 我们都知道Java在(被认为是“常用” )范围内为数字缓存(以及一些其他类型)。 缓存的设计如下: 我知道可以通过为JVM提供参数来扩展值: 我不明白的是为什么我们不允许覆盖该值? 请注意,我并不是想找到一种解决方法,而是要理解为什么出于某些晦涩的原因而不允许这样做。 问题答案: 发现对此已经存在未解决的RFP。 乔·达西(Joe Darcy)对这个问题发表了评论: 可以想象也可以缓存

  • 如何为取自变量而不是文件的log4j2应用xml配置?

  • 问题内容: 我正在一个JavaScript项目上,只是想知道为什么对象实例不继承和其他方法,而不必调用超类(superobject?)方法。 我看过了MDN文档,实际上有“非标准”属性方法。 但这些已被弃用。为什么要转向方法? 在我看来,类似的东西比更好。对于其他一些Object方法,我也会说同样的话。 问题答案: 这是为了避免发生冲突-通常情况下,对象的问题不具有所需值的属性。 JS中的对象通常