Estoy intentando crear un mensaje SOAP simple para enviar desde un cliente, pero aparentemente no puedo cambiar el URI del espacio de nombres "jabón" en el sobre.No se puede cambiar el URI de jabón en un sobre usando Java SoapMessage
Esto es lo que el encabezado de jabón debe ser similar:
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope/" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding/"> ... </soap:Envelope>
Así que el siguiente código:
final SOAPMessage sm = MessageFactory.newInstance().createMessage();
final SOAPPart sp = sm.getSOAPPart();
final SOAPEnvelope se = sp.getEnvelope();
final SOAPHeader sh = se.getHeader();
final SOAPBody sb = se.getBody();
se.removeNamespaceDeclaration(se.getPrefix());
se.addNamespaceDeclaration("soap", "http://www.w3.org/2001/12/soap-envelope");
se.setPrefix("soap");
sb.setPrefix("soap");
sh.setPrefix("soap");
se.setEncodingStyle("http://www.w3.org/2001/12/soap-encoding/");
Sin embargo, al imprimir el mensaje antes de enviarlo, lo que sigue es mi sobre :
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding/">
Observe las diferencias en los URI de xmlns: soap en la sección "debería ser" y el real.
Si cambio el primer argumento de la llamada a addNamespaceDeclaration
"jabonosa" en lugar de "jabón", esto es la siguiente dotación consigo:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapy="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding/">
supongo que puede tener algo que ver con el hecho de que la llamada es addNamespaceDeclaration
en lugar de algo como changeNamespaceDeclaration
, y se ignora teniendo en cuenta que el espacio de nombres ya está presente, pero no puedo encontrar algo que funcione (ya lo intenté setAttributeNS
).
EDIT: Me acabo de dar cuenta de que setAttributeNS
es tonto porque eso está cambiando el espacio de nombres, no el URI. EDITAR DE NUEVO: Estoy un poco confundido, mientras sigo buscando Veo a veces que el nombre va soap:"Namespace"
, así que en ese sentido quiero cambiar el espacio de nombres ... pero pensé que el espacio de nombres era la parte "jabón" . ¿Alguna aclaración?
Esta es mi primera publicación, así que me disculpo si estoy pidiendo algo que ya se ha resuelto, pero he buscado y la mayoría de lo que he encontrado está relacionado con cambiar el espacio de nombres (como SOAP-ENV , que es el espacio de nombres predeterminado, a jabón) en lugar de la URI en sí. Gracias por adelantado.
-M
Gracias por la respuesta rápida erik, sin embargo lo intenté unos 5 minutos antes de su publicación y vi que el espacio de nombre predeterminado había cambiado de "SOAP-ENV" (que había cambiado a "jabón") a "env": ' \t ... env: Envelocidad pe> ' Realmente necesito el sobre para que coincida con lo que había publicado originalmente, ¿alguna otra sugerencia? Tal vez solo necesito compilar el mensaje, ya que parece que los dos protocolos soportados por MessageFactory no son del todo correctos ... –
MandM
El prefijo (ej. 'Env' o' soap') no tiene ningún significado semántico, es solo un atajo para referenciar el espacio de nombres (por ejemplo, 'http: // www.w3.org/2003/05/soap-envelope'). – erikxiv
Es bueno saber, sin embargo, creo que el dispositivo con el que me estoy comunicando requiere que esos campos sean de esa manera en la solicitud (creo). – MandM