【问题标题】:Camel CXF Soap Client calling web service with multiple input parametersCamel CXF Soap 客户端调用具有多个输入参数的 Web 服务
【发布时间】:2016-06-01 23:43:13
【问题描述】:

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

如您所见,端口接受两个参数并返回响应,我想将其委托回我的骆驼路线。在骆驼中实现这一点的最佳方法是什么?我已经定义了我的 CXF Enpoint,我只是在努力解决其中的 DSL 路由部分。我应该像在这个链接中找到的那样添加一个处理器吗? Apache Camel and web services

谢谢

【问题讨论】:

  • 骆驼路线你写了吗。如果是,请分享。

标签: java spring apache-camel cxf cxf-client


【解决方案1】:

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

【讨论】:

  • 我不确定是否是因为我们在 Karaf (OSGI) 中并使用蓝图而不是 Spring 上下文,但是当我加载我的应用程序时出现 XML 解析错误,指出 dataFormat 不是有效选项。我们正在使用 CXF 2.7.7 和 camel 2.12.4,所以这也可能是一个问题
  • 你能发布你的配置文件吗?理想情况下,应该在 jax-ws 属性中设置 DATAFORMAT
【解决方案2】:

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

    }
`

【讨论】:

    猜你喜欢
    • 2015-07-31
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多