Web services 创建CXF web服务客户端时的ServiceConstructionException

Web services 创建CXF web服务客户端时的ServiceConstructionException,web-services,cxf,webservice-client,Web Services,Cxf,Webservice Client,我创建了一个web服务客户端,在创建web服务时收到以下错误。我想知道我是否在这个错误上遗漏了什么: Error running SQL module: org.apache.cxf.service.factory.ServiceConstructionException: Could not resolve a binding for null javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceCon

我创建了一个web服务客户端,在创建web服务时收到以下错误。我想知道我是否在这个错误上遗漏了什么:

Error running SQL module: org.apache.cxf.service.factory.ServiceConstructionException: Could not resolve a binding for null
javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException: Could not resolve a binding for null
        at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:298)
        at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:291)
        at javax.xml.ws.Service.getPort(Service.java:44)
        at net.sf.gateway.client.base.sql.SQLClientBase.setSecurityHeaderTokens(SQLClientBase.java:244)
        at net.sf.gateway.client.base.sql.SQLClientBase.get(SQLClientBase.java:292)
        at net.sf.gateway.client.module.sql.SQLModule.getBatch(SQLModule.java:149)
        at net.sf.gateway.client.module.sql.SQLModule.getAndProcessSQL(SQLModule.java:110)
        at net.sf.gateway.client.module.sql.SQLModule.run(SQLModule.java:280)
        at net.sf.gateway.client.GatewayClient.exec(GatewayClient.java:399)
        at net.sf.gateway.client.GatewayClient.run(GatewayClient.java:174)
        at net.sf.gateway.client.GatewayClient.main(GatewayClient.java:166)
Caused by: 
org.apache.cxf.service.factory.ServiceConstructionException: Could not resolve a binding for null
        at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createBindingInfo(AbstractWSDLBasedEndpointFactory.java:404)
        at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpointInfo(AbstractWSDLBasedEndpointFactory.java:258)
        at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:146)
        at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:51)
        at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:102)
        at org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:115)
        at org.apache.cxf.jaxws.ServiceImpl.createPort(ServiceImpl.java:437)
        at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:296)
        ... 10 more
Caused by: 
org.apache.cxf.BusException: No binding factory for namespace http://schemas.xmlsoap.org/soap/ registered.
        at org.apache.cxf.binding.BindingFactoryManagerImpl.getBindingFactory(BindingFactoryManagerImpl.java:91)
        at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createBindingInfo(AbstractWSDLBasedEndpointFactory.java:394)
        ... 17 more
代码如下:

ClassLoader cl = Thread.currentThread().getContextClassLoader();
URL WSDL_LOCATION=null;
if ( null == cl ) cl = SQLService.class.getClassLoader();
WSDL_LOCATION = cl.getResource( "SQLServiceSoap.wsdl" );
QName SERVICE_NAME = new QName("https://myurl.org/services/myService?wsdl", "SQLService");
Service service = Service.create(WSDL_LOCATION,SERVICE_NAME);
SOAPport sqlService = service.getPort(SOAPport.class);
Client client = org.apache.cxf.frontend.ClientProxy.getClient(sqlService);
Endpoint cxfEndpoint = client.getEndpoint();
Map<String, Object> outProps = new HashMap<String, Object>();
outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
outProps.put(WSHandlerConstants.USER, soapUser);
outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, PasswordCallbackHandler.class.getName());
outProps.put("password", soapPass);
WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps);
cxfEndpoint.getOutInterceptors().add(wssOut);

String result = sqlService.ping("test");
ClassLoader cl=Thread.currentThread().getContextClassLoader();
URL WSDL_LOCATION=null;
if(null==cl)cl=SQLService.class.getClassLoader();
WSDL_LOCATION=cl.getResource(“SQLServiceSoap.WSDL”);
QName服务_NAME=新的QName(“https://myurl.org/services/myService?wsdl“,“SQLService”);
Service=Service.create(WSDL\u位置、服务\u名称);
SOAPport-sqlService=service.getPort(SOAPport.class);
Client Client=org.apache.cxf.frontend.ClientProxy.getClient(sqlService);
端点cxfEndpoint=client.getEndpoint();
Map outProps=new HashMap();
put(WSHandlerConstants.ACTION,WSHandlerConstants.USERNAME\u令牌);
put(WSHandlerConstants.USER、soapUser);
outProps.put(WSHandlerConstants.PASSWORD_类型,WSConstants.PW_文本);
put(WSHandlerConstants.PW_CALLBACK_类,PasswordCallbackHandler.CLASS.getName());
outProps.put(“密码”,soapPass);
WSS4JOutInterceptor wssOut=新的WSS4JOutInterceptor(输出程序);
cxfEndpoint.getOutiterCeptors().add(wssOut);
字符串结果=sqlService.ping(“测试”);

这就是它死亡的地方:
SOAPport-sqlService=service.getPort(SOAPport.class)

看起来类路径上没有soap绑定。如果使用maven,您是否将cxf rt bindings soap工件作为依赖项?

cxf.xml
缺失,这就是问题所在。

cxf.xml缺失,这就是问题所在。