java xml webservice-client xalan saaj

java - NAMESPACE_ERR: se intenta crear o cambiar un objeto de forma incorrecta con respecto a los espacios de nombres



xml webservice-client (5)

Intentando recuperar el cuerpo SOAP de una respuesta SOAP, pero obteniendo este error:

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);

Usando Saaj1.4

¿Qué sería una solución para esto?


Me enfrenté al mismo problema. En mi caso, solucionar el problema en el lado del servidor no era una opción. Lo arreglé en el lado del cliente forzando a Xalan a la versión 2.7.0. Ver this


Resolví esto haciendo que el espacio de nombres DocumentBuilderFactory sea consciente:

DocumentBuilderFactory.setNamespaceAware(true)


Tuve el mismo problema usando spring-ws

Al agregar otra biblioteca de terceros, xalan-2.6.0.jar se agregó a mi archivo war. Esto causó la misma NAMESPACE_ERR

xalan-2.7.0.jar el error agregando xalan-2.7.0.jar en xalan-2.7.0.jar lugar, como lo sugirió Spring .


Tuve un problema similar con Flying Saucer. Siguiendo los consejos de jddsantaella, revisé mis dependencias de POM. El proyecto que estaba usando utiliza Struts y debajo de las cubiertas Struts tenía una dependencia de Xalan 2.5.1.

Agregué lo siguiente al POM en la sección de dependencia de struts:

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

El platillo volante ahora funciona de maravilla.

Espero que esto ayude.


Yo mismo tuve este problema exacto y perdí un buen medio día reparándolo debido a lo vago que es el mensaje de error. El problema es con su servicio SOAP (NO la implementación del cliente). Está generando un error porque hay un problema de espacio de nombres con el XML que está enviando al cliente.

Hay tres razones posibles para el problema de acuerdo con este artículo :

  1. Un prefijo de espacio de nombres nulo
  2. Un prefijo de espacio de nombres de "xml" que no se encuentra en el espacio de nombresURI de "http://www.w3.org/XML/1998/namespace"
  3. Un prefijo de espacio de nombres de "xmlns" que no está en el namespaceURI de "http://www.w3.org/2000/xmlns/"

En mi caso fue el # 1 anterior que causó el problema. No estaba devolviendo el XML con un espacio de nombres. Lo arreglé agregando un espacio de nombres (la variable "ns") al elemento raíz y a todos los nodos secundarios, de este modo:

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));

Es importante tener en cuenta que mi código de ejemplo es para JDom , no para JDom , como la persona estaba preguntando. Tendrá que usar el código apropiado para la biblioteca XML que está utilizando.