使用任何最常用的肥皂服务框架(至少是我尝试过的那些)并且提出这种肥皂请求看起来非常困难
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://bencws.foobar.com/doc/2008-01-01/"
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/">
<soap:Header xmlns:foo="http://safe.foobar.com/doc/2007-01-01/" xmlns:oof="http://www.w3.org/2005/08/addressing">
<foo:AccessKeyId>0PKRFZMV7GRJ11N791R2</foo:AccessKeyId>
<foo:Timestamp>2008-03-07T23:55:22.693Z</foo:Timestamp>
<foo:Signature>someencodedstring</foo:Signature>
<oof:Action>SomeAction</oof:Action>
<oof:To>http://bencws.foobar.com</oof:To>
<oof:MessageID>120493412293</oof:MessageID>
<oof:ReplyTo>
<oof:Address> http://www.w3.org/2005/08/addressing/anonymous</oof:Address>
</oof:ReplyTo>
</soap:Header>
<soap:Body>
...
使用cxf我开始使用cxf-codegen-plugin从wsdl文件创建类存根。 但后来“标准”的东西不允许更改soap:Header命名空间甚至在标签内添加内容(除非你向后弯曲两次)
使用axis2我使用了WSDL2Java,并且遇到了同样的麻烦。
我想出了正式的“正确”肥皂请求,但是除非我的 soap:Envelope 和< foobar 服务不会接受它们strong> soap:Header 看起来并不完全像。
任何帮助将不胜感激。我应该尝试别的吗? 我们现在正在考虑手动编写xml请求,这是我应避免的。
答案 0 :(得分:0)
使用CXF,将声明的名称空间放到soap:Envelope上相对容易。您可以提供名称空间地图 - &gt;通过请求属性为客户端添加前缀:
((BindingProvider)proxy).getRequestContext().put("soap.env.ns.map", map);
因此,如果您可以在那里声明foo和oof命名空间,那么您可以这样做。将它们添加到肥皂:标题绝对不是一件容易的事。 : - (