Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When generated an Apache CXF client, why is the WSDL still needed when instantiating the client?

I want to consume a SOAP service but the WSDL is provided to me offline, thus resulting in the client being generated with the local path to the WSDL.

public class SoSo extends Service {
    public final static URL WSDL_LOCATION;
    public final static QName SERVICE = new QName("http://tempuri.org/", "SoSo");
    public final static QName SoSoSoap12 = new QName("http://tempuri.org/", "SoSoSoap12");
    public final static QName SoSoSoap = new QName("http://tempuri.org/", "SoSoSoap");
    static {
        URL url = null;
        try {
            url = new URL("file:/c:/Dev/Java/workspace/service-individualreport/src/main/resources/wsdl/SoSo.wsdl");
        } catch (MalformedURLException e) {
            java.util.logging.Logger.getLogger(SoSo.class.getName())
                .log(java.util.logging.Level.INFO, 
                 "Can not initialize the default wsdl from {0}", "file:/c:/Dev/Java/workspace/service-individualreport/src/main/resources/wsdl/SoSo.wsdl");
    }
    WSDL_LOCATION = url;
}

From my point of view I would like to only build the WSDL once and then specify the location of the service.

like image 716
Kristoffer Avatar asked Feb 21 '23 18:02

Kristoffer


1 Answers

Couple parts to this question:

1) Per JAX-WS spec, the generated code doesn't have ALL the information needed for the request. Thus, the wsdl is technically needed. With CXF, you CAN pass "null" for the wsdl URL and then use the ((BindingProvider)port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://localhost/....") to set the address and for many use cases, it will work.

2) The wsdl2java tool does have a -wsdlLocation flag that can be used to generate service objects with specific locations. -wsdlLocation "" should result in nothing burned into the code. The code wouldn't really be portable then though. (JAXWS ri/metro requires the wsdl)

like image 116
Daniel Kulp Avatar answered Apr 29 '23 08:04

Daniel Kulp