Java NAMESPACE_ERR:试图创建或更改对象的方式与名称空间不符
试图从SOAP响应检索SOAP正文,但出现以下错误:Java NAMESPACE_ERR:试图创建或更改对象的方式与名称空间不符,java,xml,webservice-client,xalan,saaj,Java,Xml,Webservice Client,Xalan,Saaj,试图从SOAP响应检索SOAP正文,但出现以下错误: NAMESPACE_ERR: An attempt is made to create or change an object in a way which is incorrect with regard to namespaces. Document doc = soapResMsg.getSOAPBody().extractContentAsDocument(); -- Exception is thrown here org.dom
NAMESPACE_ERR: An attempt is made to create or change an object in a way which is incorrect with regard to namespaces.
Document doc = soapResMsg.getSOAPBody().extractContentAsDocument(); -- Exception is thrown here
org.dom4j.io.DOMReader d4Reader = new org.dom4j.io.DOMReader();
org.dom4j.Document d4doc = d4Reader.read(doc);
使用Saaj1.4
有什么办法可以解决这个问题呢?我自己也遇到了这个问题,由于错误信息非常模糊,我浪费了整整半天的时间来解决它。问题在于SOAP服务(而不是客户端实现)。它抛出了一个错误,因为您发送给客户端的XML存在名称空间问题 根据报告,该问题可能有三个原因:
Namespace ns = Namespace.getNamespace("tns", "http://mycompany.com/schemas");
Element result = new Element("ResponseType", ns);
Document doc = new Document(result);
result.addContent(new Element("StatusCode", ns).setText(code));
result.addContent(new Element("Message", ns).setText(message));
重要的是要注意,我的示例代码是为,而不是像那个人所问的那样。您必须使用适合您所使用的XML库的代码 我也面临同样的问题。在我的例子中,在服务器端修复问题不是一个选项。我在客户端修复了它,强制Xalan升级到2.7.0版。看。我对飞碟也有类似的问题。 按照jddsantaella的建议,我查看了我的POM依赖项。我所使用的项目使用了Struts,Struts在幕后依赖于Xalan 2.5.1 我在struts依赖项部分的POM中添加了以下内容:
<exclusions>
<exclusion>
<artifactId>xalan</artifactId>
<groupId>xalan</groupId>
</exclusion>
</exclusions>
沙兰
沙兰
飞碟现在是一种享受
希望这有帮助。我在使用SpringWS时也遇到同样的问题 通过添加另一个第三方库,
xalan-2.6.0.jar
被添加到我的war文件中。这导致了相同的名称空间\u ERR
我通过添加
xalan-2.7.0.jar
解决了这个错误,正如。我通过让DocumentBuilderFactory名称空间感知解决了这个问题:
DocumentBuilderFactory.setNamespaceAware(true)
我在Java8和WebLogic12c中遇到了这个问题 在我的例子中,它帮助添加到WAR
org.glassfish.jaxb:jaxb运行时:2.3.3
棘手的是,应用程序在没有依赖项的情况下运行了很长时间。但是在一个特定的请求中,有什么东西导致了这个错误,我仍然不确定它是什么。但是,新的依赖项起到了作用。如果另一个依赖项强迫我使用xalan-2.6.0,我该怎么办?谢谢,这对我很有用。升级此库修复了我的问题,并且似乎没有影响使用该库的代码。你救了我一天!