我正在使用Camel并使用CXF从WSDL生成代码。我生成了一个客户端存根,实现如下所示:
SetDeviceDetailsv4 port = ss.getSetDeviceDetailsv4Port();
com.vodafone.gdsp.ws.SetDeviceDetailsv4_Type _setDeviceDetailsv4_parameters = null;
com.vodafone.gdsp.ws.GdspHeader _setDeviceDetailsv4_gdspHeader = null;
com.vodafone.gdsp.ws.SetDeviceDetailsv4Response _setDeviceDetailsv4__return = port.setDeviceDetailsv4(_setDeviceDetailsv4_parameters, _setDeviceDetailsv4_gdspHeader);
System.out.println("setDeviceDetailsv4.result=" + _setDeviceDetailsv4__return);
正如您所看到的,端口接受两个参数并返回响应,我想将其委托给我的Camel Route。在Camel中实现此功能的最佳方法是什么?我已经定义了我的CXF Enpoint,我只是在努力解决它的DSL路由部分问题。我应该添加像此链接中找到的处理器吗? Apache Camel and web services
由于
答案 0 :(得分:1)
您可以使用jax-ws客户端(实现为bean)并在camel DSL中使用它。 JAX-WS客户端bean定义采用服务类/接口,允许您配置其他属性,如SSL config&在路线中,我们可以将它用作豆。它将JAXB生成的Request对象(WSDL请求对象)作为输入,并返回JAXB生成的响应对象(WSDL响应对象)。要将pojo转换为JAXB类,可以使用Dozer框架,也可以使用自定义映射。 Jax-WS客户端也可灵活地将XML作为请求和响应。在这种情况下,需要将属性设置为DATAFORMAT作为PAYLOAD。
答案 1 :(得分:0)
我不确定这是否是正确的方法,但是我将两个“输入”对象添加为Camel Header,然后我编写了一个处理器,抓住了我需要的东西并将两个对象放在了服务中需要调用作为参数。
public void process(Exchange exchange) throws Exception {
Message inMessage = exchange.getIn();
gdspHeader = inMessage.getHeader(GDSP_HEADER, com.vodafone.gdsp.ws.GdspHeader.class);
commModule = inMessage.getHeader(COMM_MODULE_HEADER, resmed.hi.ngcs.datastore.model.CommModule.class);
SetDeviceDetailsv4_Type deviceDetails = createSetDeviceDetailsv4(commModule);
List<Object> params = new ArrayList<>();
params.add(deviceDetails);
params.add(gdspHeader);
inMessage.setBody(params);
}
`