Search code examples
javaweb-servicessoapwsdlcxf

How to remove namespace from the soap message received from server


I am very new to Apache CXF and I am stuck with the issue of removing namespace from the SOAP message that I receive from the external server (I am serving as a client for consuming the service)

The stubs that are generated from the wsdl have a different namespace in the @WebResult while the SOAP envelope which is received from the server system is different. I want to apply a generic solution so as to remove the namespace from the response message so the client validation does not fail.

o.a.c.p.PhaseInterceptorChain - Interceptor for {http://www.abc.xyz/webservices/facade}service#{http://www.abc.xyz/webservices/facade}serviceName has thrown exception, unwinding now

org.apache.cxf.interceptor.Fault: Unexpected element {http://www.abc.xyz/webservices/facade}serviceResponse found. Expected {http:// www.abc.xyz/webservices/facade/xxx}serviceResponse.

Kindly help.

Solutions tried till now :

(CXF Transformation Feature)

Map<String, String> inTransformMap = Collections.singletonMap("{http:// www.abc.xyz/webservices/facade/**xxx**}serviceResponse", "");
org.apache.cxf.interceptor.transform.TransformInInterceptor transformInInterceptor = new org.apache.cxf.interceptor.transform.TransformInInterceptor();
transformInInterceptor.setInTransformElements(inTransformMap);
proxy.getInInterceptors().add(transformInInterceptor);

In this approach, when I try to replace {http://www.abc.xyz/webservices/facade/**xxx**}serviceResponse with "", server hangs and it goes into infinite loop at org.apache.cxf.staxutils.transform.InTransformReader.handleDeepDrop() line 266


Solution

  • I was finally able to solve this issue by the following

    JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
    Map<String, Object> props = factory.getProperties();
    if (null == props) {
        props = new HashMap<String, Object>();
    }
    props.put("soap.no.validate.parts", true);
    factory.setProperties(props);
    

    The above solution will allow the incoming response validation to be turned off and hence there won't be any exception like org.apache.cxf.interceptor.Fault: Unexpected element.