0

我需要从我的 apache camel 调用异步 Web 服务。

为此,当我调用终端系统时,我需要从我的 camel-cxf.xml 的标头中传递replyTo Address。

如果我将此作为 SOAP UI 的标头传递,它对我来说工作正常,并且终端系统会向我发送回复“xxxx”地址。

<soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"> <wsa:ReplyTo> <wsa:Address>xxxx</wsa:Address> </wsa:ReplyTo> <wsa:MessageID>urn:uuid:111342</wsa:MessageID> </soapenv:Header>

但我需要从我的代码中设置这个属性。

在我的处理方法中,我这样做了

    QName qname1=QName.valueOf("{http://www.w3.org/2005/08/addressing}ReplyTo");
    SoapHeader header1 = new SoapHeader(qname1, "xxxx");

    String requestHeader = "<wsa:ReplyTo xmlns:wsa=\"http://www.w3.org/2005/08/addressing\"> "
            + "<wsa:Address xmlns:wsa=\"http://www.w3.org/2005/08/addressing\">xxxx</wsa:Address>"
            + "</wsa:ReplyTo>"
            + "<wsa:MessageID xmlns:wsa=\"http://www.w3.org/2005/08/addressing\">urn:uuid:111342</wsa:MessageID>";


    final List<SoapHeader> headers=new ArrayList<SoapHeader>();
      headers.add(new SoapHeader(qname1,DOMUtils.readXml(new StringReader(requestHeader)).getDocumentElement()));

    exchange.getIn().setHeader(SoapHeader.HEADER_LIST,headers);

但它不起作用..任何人都可以给我一个合适的解决方案吗?

4

1 回答 1

1

如果您使用 cxf,您可以使用 JaxWsProxyFactoryBean 进行客户端调用并添加 ws 寻址功能以启用 ws 寻址。

例如

JaxWsProxyFactoryBean factory = ...;
factory.getFeatures().add(new WSAddressingFeature());

亲切的问候,土工

于 2015-03-11T16:22:26.450 回答