Tôi đã tạo ứng dụng khách dịch vụ web và tôi nhận được lỗi sau khi dịch vụ web đang được tạo. Tôi đã tự hỏi nếu tôi thiếu cái gì về lỗi này:ServiceConstructionXảy ra khi tạo ứng dụng khách dịch vụ web CXF
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
Đây là mã:
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");
Đây là nơi nó chết: SOAPport sqlService = service.getPort(SOAPport.class);
cxf.xml bị thiếu, đó là vấn đề. – JohnC