Axis2 - 未声明的命名空间前缀“soapenv”

时间:2017-08-15 04:14:59

标签: java wsdl axis2

有人知道如何在调用由axis2 1.7.5(Wsdl2Java)生成的存根时解决以下问题吗?

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);

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

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设置问题

请帮忙。非常感谢。

2 个答案:

答案 0 :(得分:0)

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

逐步通过调试器,可以在信封上正确设置名称空间,但是在序列化期间会丢失。就我而言,它使用的是com.sun.xml.internal.stream.writers.XMLStreamWriterImpl,在该实现中似乎出现了问题。

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

答案 1 :(得分:-1)

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