I\'ve created a web service using Spring-WS.
To maintain compatibility with the old system, I need to change namespace prefix from SOAP-ENV
to soap
.
I use SAAJ. Try this.
Don't forget: soapMessage.saveChanges();
Reference:Changing the default XML namespace prefix generated with JAXWS
Use SOAPMessage API instead of DOM.
private void alterSoapEnvelope(SaajSoapMessage soapResponse) {
try {
SOAPMessage soapMessage = soapResponse.getSaajMessage();
SOAPPart soapPart = soapMessage.getSOAPPart();
SOAPEnvelope envelope = soapPart.getEnvelope();
SOAPHeader header = soapMessage.getSOAPHeader();
SOAPBody body = soapMessage.getSOAPBody();
SOAPFault fault = body.getFault();
envelope.removeNamespaceDeclaration(envelope.getPrefix());
envelope.addNamespaceDeclaration(PREFERRED_PREFIX, SOAP_ENV_NAMESPACE);
envelope.setPrefix(PREFERRED_PREFIX);
header.setPrefix(PREFERRED_PREFIX);
body.setPrefix(PREFERRED_PREFIX);
if (fault != null) {
fault.setPrefix(PREFERRED_PREFIX);
}
} catch (SOAPException e) {
e.printStackTrace();
}
}
It's much faster now.
Additional Point :
you have to extend your Webservice config class with WsConfigurationAdapter and add your CustomEndpointInterceptor in the webservice config class as stated below.
Then only the interceptor works.
Refer below link for more details
https://memorynotfound.com/spring-ws-intercept-request-response-soap-messages/