Camel Exchange 主体设置为 xml 而不是 POJO 对象
Camel Exchange body set as xml rather than POJO Object
我有一个简单的 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 响应时,它意识到这是一个 "invalid" 主体并忽略它,因此让我回到空主体 SOAP 响应下方而不是填充的响应:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body/>
</soap:Envelope>
谁能帮帮我?我迷失了主意!非常感谢任何帮助。
希望这对将来的任何人都有帮助...事实证明这是一个导致此行为降级到 CXF-v3.1.0 的错误,现在它可以正常工作了。
我有一个简单的 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 响应时,它意识到这是一个 "invalid" 主体并忽略它,因此让我回到空主体 SOAP 响应下方而不是填充的响应:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body/>
</soap:Envelope>
谁能帮帮我?我迷失了主意!非常感谢任何帮助。
希望这对将来的任何人都有帮助...事实证明这是一个导致此行为降级到 CXF-v3.1.0 的错误,现在它可以正常工作了。