Camel CXF Soap 客户端调用具有多个输入参数的 Web 服务

Camel CXF Soap Client calling web service with multiple input parameters

我正在使用 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);

如您所见,端口有两个参数和 returns 响应,我想将其委托回我的 Camel Route。在 Camel 中实现这个的最好方法是什么?我已经定义了我的 CXF Enpoint,我只是在努力处理它的 DSL 路由部分。我是否应该像 link 中那样添加一个处理器?

谢谢

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

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

    }
`