生成Apache CXF客户端时,为什么在实例化客户端时仍然需要WSDL?

时间:2012-01-20 17:58:26

标签: java apache wsdl cxf

我想使用SOAP服务但是离线提供给我的WSDL,从而导致客户端使用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;
}

从我的角度来看,我想只构建一次WSDL,然后指定服务的位置。

1 个答案:

答案 0 :(得分:8)

对这个问题的几个部分:

1)根据JAX-WS规范,生成的代码没有 ALL 请求所需的信息。因此,技术上需要wsdl。使用CXF,您可以为wsdl URL传递“null”,然后使用((BindingProvider)端口).getRequestContext()。put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,“http:// localhost / ....”)来设置地址和许多用例,它将起作用。

2)wsdl2java工具确实有一个-wsdlLocation标志,可用于生成具有特定位置的服务对象。 -wsdlLocation“”应该导致代码中没有任何内容。然而,代码实际上并不是可移植的。 (JAXWS ri / metro需要wsdl)