繁体   English   中英

Java SOAP-WS客户端恐怖

[英]Java SOAP-WS client horror

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

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

我提出了看起来像是“正确的”肥皂请求的形式,但是怪异的foob​​ar服务将无论如何都不会接受它们,除非我的soap:Envelopesoap:Header看起来不完全一样。

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

使用CXF,将名称空间声明到soap:Envelope相对容易。 您可以通过request属性为客户端提供名称空间的Map->前缀:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM