0

我正在使用 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。在骆驼中实现这一点的最佳方法是什么?我已经定义了我的 CXF Enpoint,我只是在努力解决其中的 DSL 路由部分。我应该像在这个链接中找到的那样添加一个处理器吗?Apache Camel 和 Web 服务

谢谢

4

2 回答 2

1

您可以使用 jax-ws 客户端(实现为 bean)并在骆驼 DSL 中使用它。JAX-WS 客户端 bean 定义采用服务类/接口,并允许您配置其他属性,如 SSL 配置等。在路由中,我们可以将其用作 bean。它将 JAXB 生成的请求对象(WSDL 请求对象)作为输入,并返回 JAXB 生成的响应对象(WSDL 响应对象)。要将 pojo 转换为 JAXB 类,可以使用 Dozer 框架,也可以使用自定义映射。Jax-WS 客户端还可以灵活地将 XML 作为请求和响应。在这种情况下,需要将属性设置为 DATAFORMAT 作为 PAYLOAD。

于 2016-05-30T01:25:53.490 回答
1

我不确定这是否是正确的方法,但我将我的两个“输入”对象都添加为 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);

    }
`
于 2016-06-01T15:43:13.377 回答