我想使用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)