我需要从我的apache camel调用异步Web服务。
因为我需要从我的camel-cxf.xml传递replyTo地址,当我调用end system时。
如果我将此作为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);
但它没有用......任何人都可以给我一个合适的解决方案吗?
答案 0 :(得分:1)
如果使用cxf,可以使用JaxWsProxyFactoryBean进行客户端调用,并添加ws寻址功能以启用ws寻址。
例如
JaxWsProxyFactoryBean factory = ...;
factory.getFeatures().add(new WSAddressingFeature());
亲切的问候, soilworker