NAMESPACE_ERR: предпринимается попытка создать или изменить объект таким образом, который неверен в отношении пространств имен

Попытка извлечь тело 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

Каким будет это исправление?

Ответы

Ответ 1

Я столкнулся с той же проблемой. В моем случае исправление проблемы на стороне сервера не было вариантом. Я исправил его на стороне клиента, вынудив Xalan версии 2.7.0. См. .

Ответ 2

У меня была аналогичная проблема с Flying Saucer. Следуя советам jddsantaella, я просмотрел зависимости POM. В проекте, который я использовал, использовались Struts, а под покровом стойки была зависимость от Xalan 2.5.1.

Я добавил следующее в POM в разделе зависимости struts:

<exclusions>
<exclusion>
    <artifactId>xalan</artifactId>
        <groupId>xalan</groupId>
</exclusion>
</exclusions>

Летающий тарелка теперь работает.

Надеюсь, что это поможет.

Ответ 3

У меня была эта точная проблема, и я потратил целую половину дня на исправление ее из-за того, насколько туманным является сообщение об ошибке. Проблема заключается в вашей службе 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));

Важно отметить, что мой примерный код для JDom, а не Dom4j, как спрашивал человек. Вам нужно будет использовать код, соответствующий используемой библиотеке XML.

Ответ 4

У меня была такая же проблема, используя spring -ws

Добавив еще одну стороннюю библиотеку, в мой военный файл был добавлен xalan-2.6.0.jar. Это вызвало тот же самый NAMESPACE_ERR

Я разрешил ошибку, добавив xalan-2.7.0.jar вместо этого, в качестве предложенный spring.

Ответ 5

Я решил это, указав пространство имен DocumentBuilderFactory:

DocumentBuilderFactory.setNamespaceAware(true)