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

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


person Java Guy    schedule 27.10.2010    source источник


Ответы (6)


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

DocumentBuilderFactory.setNamespaceAware(true)
person Julius    schedule 08.01.2017

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

person jddsantaella    schedule 27.01.2012

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

Согласно этой статье, проблема может быть вызвана тремя причинами:

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

person Brent Matzelle    schedule 04.11.2010

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

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

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

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

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

person theINtoy    schedule 15.06.2012

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

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

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

person powerMicha    schedule 12.07.2012
comment
Что мне делать, если я вынужден использовать xalan-2.6.0 из-за другой зависимости? - person Everv0id; 01.06.2016
comment
Спасибо, это сработало для меня. Обновление этой библиотеки устранило мою проблему и, похоже, не повлияло на код, использующий эту библиотеку. - person MattWeiler; 23.08.2018
comment
Вы спасли мой день! - person dr0i; 26.10.2020

Я столкнулся с проблемой с Java 8 и WebLogic 12c.

В моем случае помогло добавление в WAR org.glassfish.jaxb:jaxb-runtime:2.3.3

Хитрость заключалась в том, что приложение довольно долго работало без зависимости. Но что-то в одном конкретном запросе вызвало эту ошибку, и я до сих пор не уверен, что это было. Однако новая зависимость помогла.

person RPorazil    schedule 20.11.2020