It worked. I also had to match the "servicename" and "endpointName" values for jaxws:endpoint to the corresponding Wsdl. Thanks Dan.
Sonam Nepali -----Original Message----- From: Daniel Kulp [mailto:[email protected]] Sent: Wednesday, March 16, 2011 5:54 PM To: [email protected] Cc: Sonam Nepali Subject: Re: Exposing the Original Wsdl instead of the implementation in Jaxws-endpoint On Wednesday 16 March 2011 5:09:11 PM Sonam Nepali wrote: > Right now, I can't post the wsdl because of privacy issues. But I did try > the wsdlLocation as in the following: > > <jaxws:endpoint id="PersonEndpoint" implementor="a.b.PersonImpl" > endpointName="e:PersonEN" serviceName="s:PersonSN" > address="/Person" > xmlns:e="http://service.jaxws.cxf.apache.org/endpoint" > xmlns:s="http://service.jaxws.cxf.apache.org/service" > wsdlLocation="WEB-INF/Person.wsdl"/> > > On deployment on Weblogic, I get the following excpetions: The xmlns:e and xmlns:s declarations need to match the namespaces in the WSDL. Most likely, you just need one of them and it should match the targetNamespace of the wsdl. Dan > > ... > Caused by: javax.xml.ws.WebServiceException: > org.apache.cxf.service.factory.ServiceConstructionException: Could not > find definition for service > {http://service.jaxws.cxf.apache.org/service}Person. at > org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:343) at > org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:239) at > org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:489) > > > > I will try with a simple wsdl and see if it can be reproduced there as > well. > > thanks > > Sonam Nepali > > > -----Original Message----- > From: Daniel Kulp [mailto:[email protected]] > Sent: Wednesday, March 16, 2011 3:02 PM > To: [email protected] > Cc: Sonam Nepali > Subject: Re: Exposing the Original Wsdl instead of the implementation in > Jaxws-endpoint > > On Wednesday 16 March 2011 4:41:40 PM Sonam Nepali wrote: > > Hi > > > > I have generated Java stubs from a Person.wsdl. I implemented the > > interface and is exposed as Apache CXF web service. However, I want to > > expose the original Wsdl that I started from, Person.wsdl. Is there a > > way to do that? > > > > Right now I have the following configuration: > > <jaxws:endpoint id="PersonEndpoint" > > > > implementor="a.b.PersonImpl" > > endpointName="e: PersonEN" serviceName="s:PersonSN" > > address="/Person" > > > > xmlns:e="http://service.jaxws.cxf.apache.org/endpoint" > > xmlns:s="http://service.jaxws.cxf.apache.org/service"/> > > You likely need to add a wsdlLocation="/WEB-INF/wsdl/person.wsdl" attribute > to that to have it grab the original wsdl and schemas. Without that, > it's likely generating a new WSDL/schema from the classes. > > > But with this configuration, when I try to build a SoapUI project using > > the hosted wsdl (http://localhost:7001/mywar/Person?wsdl) url I get the > > following error on server-side: > > > > > > Caused by: javax.wsdl.WSDLException: WSDLException: > > faultCode=OTHER_ERROR: Can't find prefix for > > 'http://www.w3.org/2007/05/addressing/metadata'. Namespace prefixes must > > be set on the Definition object using the addNamespace(...) method. > > How reproducible is that? If you can create a small test case that shows > that error, that would be great. > > > I looked at the exposed Wsdl that's accessible at web-app context such as > > http://localhost:7001/mywar/Person?wsdl and noticed that there are no > > references to the internal XSD's that I have in the original wsdl. > > > > > > Thanks > > > > Sonam Nepali -- Daniel Kulp [email protected] http://dankulp.com/blog Talend - http://www.talend.com
