【问题标题】:Axis2 - Undeclared namespace prefix "soapenv"Axis2 - 未声明的命名空间前缀“soapenv”
【发布时间】:2017-08-15 04:14:58
【问题描述】:

有谁知道在调用axis2 1.7.5(Wsdl2Java)生成的stub时如何解决以下问题?

org.apache.axis2.AxisFault: com.ctc.wstx.exc.WstxParsingException: Undeclared namespace prefix "soapenv"
 at [row,col {unknown-source}]: [1,56]
    at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:508)
    at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:368)

我发现存根发送了以下请求而没有添加/定义导致问题的 SOAP 版本 (xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/")

<soapenv:Envelope>
    <soapenv:Header></soapenv:Header>
    <soapenv:Body>....</soapenv:Body>
</soapenv:Envelope>

因此,我尝试将 SoapVersionURL 设置如下

stub._getServiceClient().getOptions().setSoapVersionURI(org.apache.axis2.namespace.Constants.URI_SOAP11_ENV);

甚至直接将stub中的命名空间设置为

envelope.declareNamespace("http://schemas.xmlsoap.org/soap/envelope/", "soapenv")

但是,这两种方法仍然忽略“xmlns:soapenv”命名空间并导致未定义前缀“soapenv”。

如果我在 SoapUI 中发出请求,我可以在请求中看到 Soap 版本,如下所示

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header/>
   <soapenv:Body>
        ...
   </soapenv:Body>
</soapenv:Envelope>

我想可能是我的axis2/wsdl2Java设置问题

请帮忙。非常感谢。

【问题讨论】:

  • 嗨,您找到解决方案了吗?

标签: java wsdl axis2


【解决方案1】:

我在使用 Axis2 1.7.9 和 Axiom 1.2.22 时遇到了同样的问题。

使用调试器单步执行,命名空间在信封上设置正确,但在序列化过程中丢失。在我的例子中,它使用的是 com.sun.xml.internal.stream.writers.XMLStreamWriterImpl,并且该实现中似乎出现了问题。

我通过将 woodstox-core 和 stax2-api 添加到我的类路径来解决此问题。这些库提供了一个看起来更可靠的替代 XMLStreamWriter 实现。

【讨论】:

    【解决方案2】:

    对于这个特定的信封问题,我认为这与axis2 的1.7.* 版本有关。 我已经使用axis2-1.6.2 解决了这个问题来生成客户端。 可以下载axis2-1.6.*版here

    【讨论】:

    • 虽然此链接可能会回答问题,但 Stack Overflow 上不鼓励仅链接的答案,您可以通过获取链接的重要部分并将其放入您的答案来改进此答案,这样可以确保您的答案是如果链接被更改或删除,仍然是一个答案:)
    猜你喜欢
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2011-01-09
    相关资源
    最近更新 更多