0

使用任何最常用的肥皂服务框架(至少是我尝试过的那些)并提出这种肥皂请求看起来都非常困难

<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,最终遇到了同样的麻烦。

我已经提出了正式“正确”的肥皂请求,但该死的foobar服务无论如何都不会接受它们,除非我的soap:Envelopesoap:Header看起来不完全一样。

任何帮助都感激不尽。我应该尝试别的吗?我们现在正考虑手动编写 xml 请求,这是我会避免的。

4

1 回答 1

0

使用 CXF,将命名空间声明到 soap:Envelope 上相对容易。您可以通过请求属性向客户端提供命名空间 -> 前缀的映射:

((BindingProvider)proxy).getRequestContext().put("soap.env.ns.map", map);

因此,如果您可以在此处声明 foo 和 oof 命名空间,则可以这样做。将它们添加到soap:Header 绝对不是一件容易的事情。:-(

于 2012-10-23T15:44:09.433 回答