【问题标题】:Java SOAP-WS client horrorJava SOAP-WS 客户端恐怖
【发布时间】:2012-10-23 09:28:53
【问题描述】:

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

<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:Envelope 和 soap:Header 看起来不完全一样。

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

【问题讨论】:

  • 哪个版本的 SOAP 使用 foobar 服务? 1.1 还是 1.2?
  • 是的,我也遇到了 cxf 和 soap Headers 的问题。这是可能的,但感觉它被埋得很奇怪,你不应该找到它。尽管如此,我还是更喜欢 cxf 而不是axis2 ..也许那是个人的东西。但是你为什么要改变soap命名空间呢?我的意思是..你要不要用肥皂?
  • 说真的,我什至不知道!他们只是告诉我必须是这样。
  • 相对而言,如果您能够生成一条消息,其中包含具有正确本地名称和命名空间 URI 的元素,但服务不会接受它们,除非您使用特定前缀等,那么我恐怕是服务坏了,而不是客户端...
  • @Ian Roberts 我同意。我能说什么......让我们说 foobar 现在是顶级科技公司之一 :)

标签: java web-services soap cxf axis2


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-04
    • 2012-04-16
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    相关资源
    最近更新 更多