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

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

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

上一篇:java – 注释@XmlElement只写?


下一篇:Java – 在Tomcat中使用RESTful服务和JAX-RS / CXF