Ответ 1
Я столкнулся с той же проблемой. В моем случае исправление проблемы на стороне сервера не было вариантом. Я исправил его на стороне клиента, вынудив Xalan версии 2.7.0. См. .
Попытка извлечь тело 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
Каким будет это исправление?
Я столкнулся с той же проблемой. В моем случае исправление проблемы на стороне сервера не было вариантом. Я исправил его на стороне клиента, вынудив Xalan версии 2.7.0. См. .
У меня была аналогичная проблема с Flying Saucer. Следуя советам jddsantaella, я просмотрел зависимости POM. В проекте, который я использовал, использовались Struts, а под покровом стойки была зависимость от Xalan 2.5.1.
Я добавил следующее в POM в разделе зависимости struts:
<exclusions>
<exclusion>
<artifactId>xalan</artifactId>
<groupId>xalan</groupId>
</exclusion>
</exclusions>
Летающий тарелка теперь работает.
Надеюсь, что это поможет.
У меня была эта точная проблема, и я потратил целую половину дня на исправление ее из-за того, насколько туманным является сообщение об ошибке. Проблема заключается в вашей службе SOAP (не в реализации клиента). Это бросает ошибку, потому что есть проблема с пространством имен с XML, который вы отправляете клиенту.
Существует три возможных причины проблемы: в этой статье:
В моем случае это было №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.
У меня была такая же проблема, используя spring -ws
Добавив еще одну стороннюю библиотеку, в мой военный файл был добавлен xalan-2.6.0.jar
. Это вызвало тот же самый NAMESPACE_ERR
Я разрешил ошибку, добавив xalan-2.7.0.jar
вместо этого, в качестве предложенный spring.
Я решил это, указав пространство имен DocumentBuilderFactory:
DocumentBuilderFactory.setNamespaceAware(true)