Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

705
Vistas
Spring-Ws Eliminar el prefijo del espacio de nombres de las respuestas (ns2, ns3...)

Sé que esto se ha preguntado 100 mil veces. Pero no logro hacerlo. La respuesta siempre viene de la siguiente manera:

 <SOAP-ENV:Header/> <SOAP-ENV:Body> <ns2:getReportResponse xmlns:ns2="http://www.example.net/myresource"> <ns2:Report>JVBE...</ns2:Report> <ns2:Messages/> </ns2:getReportResponse> </SOAP-ENV:Body>

Y quiero obtener:

 <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header/> <SOAP-ENV:Body> <getReportResponse xmlns="http://www.example.net/example"> <Report>JVBE...</Report> <Messages/> </getReportResponse> </SOAP-ENV:Body>

Ya intenté configurar elementFormDefault="unqualified" sin ningún tipo de éxito (obtuve respuestas vacías cuando se hizo esto...). ¿Algunas ideas? @NameSpace(prefix="" namespace=NAMESPACE_URI) tampoco ayudó...

Gracias por adelantado.

PD. Me encantaría usar una solución Spring-WS pura, en lugar de usar cualquier tipo de marshallers, etc. de jaxb

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Me las arreglé para arreglarlo yo mismo. Aunque no obtuve una respuesta de la comunidad, me gustaría escribir la respuesta aquí para que nadie tenga que luchar con lo que tengo hoy.

No estoy seguro de si hay una manera de lograr esto directamente usando una @notation mágica de Spring. No obstante, me las arreglé para hacer esto yo mismo de la siguiente manera:

Creé un EndpointInterceptor donde implementé un posprocesador para eliminar los prefijos no deseados.

 public class GlobalEndpointInterceptor implements EndpointInterceptor { @Override public boolean handleRequest(MessageContext messageContext, Object o) throws Exception { return true; } @Override public boolean handleResponse(MessageContext messageContext, Object o) throws Exception { return true; } @Override public boolean handleFault(MessageContext messageContext, Object o) throws Exception { return false; } @Override public void afterCompletion(MessageContext messageContext, Object o, Exception e) throws Exception { try { SOAPMessage soapMessage = ((SaajSoapMessage) messageContext.getResponse()).getSaajMessage(); SOAPHeader header = soapMessage.getSOAPHeader(); SOAPBody body = soapMessage.getSOAPBody(); header.setPrefix(""); body.setPrefix(""); Iterator<SOAPBodyElement> it = body.getChildElements(); while (it.hasNext()) { SOAPBodyElement node = it.next(); node.setPrefix(""); Iterator<SOAPBodyElement> it2 = node.getChildElements(); while (it2.hasNext()) { SOAPBodyElement node2 = it2.next(); node2.setPrefix(""); Iterator<SOAPBodyElement> it3 = node2.getChildElements(); while (it3.hasNext()) { SOAPBodyElement node3 = it3.next(); node3.setPrefix(""); } } } } catch (SOAPException exx) { exx.printStackTrace(); } } }

Y luego simplemente agregó el interceptor implementado a la configuración de WS de la siguiente manera:

 @Configuration @EnableWs public class ExampleConfiguration extends WsConfigurerAdapter { @Override public void addInterceptors(List<EndpointInterceptor> interceptors) { interceptors.add(new GlobalEndpointInterceptor()); } . . . }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda