Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java NAMESPACE_ERR:试图创建或更改对象的方式与名称空间不符_Java_Xml_Webservice Client_Xalan_Saaj - Fatal编程技术网

Java NAMESPACE_ERR:试图创建或更改对象的方式与名称空间不符

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

试图从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.dom4j.io.DOMReader d4Reader = new org.dom4j.io.DOMReader();
org.dom4j.Document d4doc = d4Reader.read(doc);
使用Saaj1.4


有什么办法可以解决这个问题呢?

我自己也遇到了这个问题,由于错误信息非常模糊,我浪费了整整半天的时间来解决它。问题在于SOAP服务(而不是客户端实现)。它抛出了一个错误,因为您发送给客户端的XML存在名称空间问题

根据报告,该问题可能有三个原因:

  • 空名称空间前缀
  • “xml”的命名空间前缀,不在的命名空间URI中http://www.w3.org/XML/1998/namespace"
  • 命名空间前缀“xmlns”,不在的命名空间URI中http://www.w3.org/2000/xmlns/"
  • 在我的例子中,问题是由上面的1引起的。我没有返回带有名称空间的XML。我通过向根元素和所有子节点添加名称空间(“ns”变量)来修复它,如下所示:

      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,我该怎么办?谢谢,这对我很有用。升级此库修复了我的问题,并且似乎没有影响使用该库的代码。你救了我一天!