NAMESPACE_ERR: сделана попытка создать или изменить объект способом, который является неправильным по отношению к пространствам имен - PullRequest
17 голосов
/ 27 октября 2010

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

Что бы исправить это?

Ответы [ 5 ]

11 голосов
/ 27 января 2012

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

9 голосов
/ 15 июня 2012

У меня была похожая проблема с Летающей тарелкой. Следуя совету jddsantaella, я просмотрел свои зависимости POM. В проекте, который я использовал, использовались Struts, и под покровами стояки зависела от Xalan 2.5.1.

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

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

Летающая тарелка теперь приносит удовольствие.

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

8 голосов
/ 12 июля 2012

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

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

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

8 голосов
/ 04 ноября 2010

У меня была именно эта проблема, и я потратил полдня на ее устранение из-за того, что смутное сообщение об ошибке.Проблема в вашем сервисе SOAP (НЕ в реализации клиента).Выдает ошибку, потому что существует проблема с пространством имен в XML, который вы отправляете клиенту.

Существует три возможных причины проблемы в соответствии с этой статьей :

  1. Пустой префикс пространства имен
  2. Префикс пространства имен "xml"«которого нет в namespaceURI» http://www.w3.org/XML/1998/namespace"
  3. Префикс пространства имен «xmlns», которого нет в namespaceURI «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.

6 голосов
/ 09 января 2017

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

DocumentBuilderFactory.setNamespaceAware(true)
...