1
votes

The requirement is SOAP WSDL Url and Endpoint URL must be different from each other. Im using Apache Camel and Apache CXF below is my blueprint but when i request at port 8043 there is no wsdl there when i change it to 9143 wsdl is there.

Need to expose wsdl on url: http://0.0.0.0:8043/Services/Interface/FSServices/FSServices.serviceagent?wsdl

Endpoint URL be: http://0.0.0.0:9143/Services/Interface/FSServices/FSServices.serviceagent/PortTypeEndpoint1/

<cxf:cxfEndpoint
        address="http://0.0.0.0:8043/Services/Interface/FSServices/FSServices.serviceagent"
        id="fsEndpoint" serviceClass="pk.com.herman.fs.operation.PortType">
        <cxf:properties>
            <entry key="publishedEndpointUrl" value="http://0.0.0.0:9143/Services/Interface/FSServices/FSServices.serviceagent/PortTypeEndpoint1/"/>
        </cxf:properties>
    </cxf:cxfEndpoint>
1
So change both the port number. You have two IP addresses in there.Namphibian

1 Answers

0
votes

Weird requirement. You could do this by adding an interceptor which disables the WSDLGetInterceptor interceptor.

Add Interceptor

<bean id="removeWSDLinterceptor"
    class="my.package.RemoveWSDLInterceptor" />

<cxf:cxfEndpoint address="http://0.0.0.0:8043/Services/Interface/FSServices/FSServices.serviceagent"
    id="fsEndpoint" serviceClass="pk.com.herman.fs.operation.PortType">
    <cxf:inInterceptors>
        <ref bean="removeWSDLinterceptor" />
    </cxf:inInterceptors>
</cxf:cxfEndpoint>

Interceptor

public class RemoveWSDLInterceptor extends AbstractPhaseInterceptor<Message> 
{

public RemoveWSDLInterceptor() {

    super(Phase.RECEIVE);
}

public void handleMessage(Message message) {
    WSDLGetInterceptor getWSDLInterceptor = null;
    InterceptorChain chain = message.getInterceptorChain();

    for(Iterator<Interceptor<? extends Message>> iter = chain.iterator(); iter.hasNext();) {
        Interceptor getWSDLInterceptor = iter.next();
        if (interceptor instanceof WSDLGetInterceptor) {
            getWSDLInterceptor = (WSDLGetInterceptor) interceptor;
        }
    }
    chain.remove(getWSDLInterceptor);
}

public void handleFault(Message messageParam) {
}
}

And then you can add a small jetty route to return the WSDL statically.

<route>
        <from uri="jetty://http://0.0.0.0:9143" />
        <to uri="language:constant:resource:file:/path/to/your/wsdlfile.wsdl"/>
</route>