Hi,

I am learning CXF and am working with the basic "HelloService" on the site's "Developing a Client HOWTO". I am trying to use the dispatch API with my service but am getting the following error:

Exception in thread "main" javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException: Could not find definition for service HelloService.
   at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:135)
at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:65)
   at javax.xml.ws.Service.<init>(Service.java:36)
   at javax.xml.ws.Service.create(Service.java:116)
   at com.eliteswa.client.Client.dispatchMethod(Client.java:56)

Here is the dispatch code I am using:

URL wsdlURL = new URL("http://localhost:9000/service/hello?wsdl";);
Service service = Service.create(wsdlURL, new QName("HelloService"));
Dispatch<Source> disp = service.createDispatch(new QName("HelloServicePort"), Source.class,
                                           Service.Mode.PAYLOAD);
Source request = new StreamSource("<hello/>");
Source response = disp.invoke(request);

Here is my WSDL from the deployed HelloService:

<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions name="HelloService" targetNamespace="http://com.example.ws/service"; xmlns:ns1="http://service.example.com/"; xmlns:ns2="http://schemas.xmlsoap.org/soap/http"; xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"; xmlns:tns="http://com.example.ws/service"; xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"; xmlns:xsd="http://www.w3.org/2001/XMLSchema";> <wsdl:import location="http://localhost:9000/service/hello?wsdl=HelloService.wsdl"; namespace="http://service.example.com/";>
   </wsdl:import>
 <wsdl:message name="sayHi">
   <wsdl:part element="ns1:sayHi" name="parameters">
   </wsdl:part>
 </wsdl:message>
 <wsdl:message name="sayHiResponse">
   <wsdl:part element="ns1:sayHiResponse" name="parameters">

   </wsdl:part>
 </wsdl:message>
 <wsdl:binding name="HelloServiceSoapBinding" type="ns1:HelloService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"; />
   <wsdl:operation name="sayHi">
     <soap:operation soapAction="" style="document" />
     <wsdl:input name="sayHi">
       <soap:body use="literal" />
     </wsdl:input>

     <wsdl:output name="sayHiResponse">
       <soap:body use="literal" />
     </wsdl:output>
   </wsdl:operation>
 </wsdl:binding>
 <wsdl:service name="HelloService">
<wsdl:port binding="tns:HelloServiceSoapBinding" name="HelloServicePort">
     <soap:address location="http://localhost:9000/service/hello"; />
   </wsdl:port>
 </wsdl:service>
</wsdl:definitions>

I know its something simple and obvious, the problem is, it's just not simply obvious to me. I am assuming that the QName("HelloService") argument to the Service.create method corresponds to the wsdl:service name attribute, but that appears not to be the case.

Any clarity is greatly appreciated.

Thanks,
John

Reply via email to