es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Java SoapMessage añadir espacio de nombres vacío

Estoy llamando a un servicio SOAP de terceros donde cada elemento debe tener un espacio de nombres. Estoy llamando desde Java a un servicio .NET. En algunos elementos, debo incluir “http:/abc.com”. Otras veces, debo incluir xmlns:””. Por ejemplo;

<getyears xmlns="http://example.com">
  <ocar xmlns="">
    <make xmlns="http://example.com">Ford</make>
    <model xmlns="http://example.com">F250
  </model></ocar>
</getyears>

Estoy usando javax.xml.soap.*

MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();
...
QName bodyName = new QName("http://example.com", "GetAircraftDueListItems");
SOAPElement soapBodyElement = soapBody.addBodyElement(bodyName);
QName qName = new QName("", "oCar");
SOAPElement carEement = soapBodyElement.addChildElement(qName);

Por defecto, esto produce la siguiente salida que es rechazada por el servicio porque falta el espacio de nombres “” en oCar.

<getyears xmlns="http://example.com">
  <ocar>
    <make xmlns="http://example.com">Ford</make>
    <model xmlns="http://example.com">F250
  </model></ocar>
</getyears>

Parece que se ignora un espacio de nombres vacío. ¿Hay alguna manera de forzar al elemento a incluir xmlns=””?

Gracias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes incluir el atributo xmlns=”” usando el método addNamespaceDeclaration() de la clase SOAPElement. Aquí tienes un ejemplo:

    QName qName = new QName("http://example.com", "oCar", "");
    SOAPElement carEement = soapBodyElement.addChildElement(qName);
    
    // Agrega el atributo xmlns="" al elemento oCar
    carEement.addNamespaceDeclaration("", "");
    

    Esto producirá la siguiente salida, que incluye el atributo de espacio de nombres vacío en el elemento oCar:

    <getyears xmlns="http://example.com">
      <ocar xmlns="">
        <make xmlns="http://example.com">Ford</make>
        <model xmlns="http://example.com">F250</model>
      </ocar>
    </getyears>
    

    Espero que esto te ayude!

Comments are closed.