You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Sonam Nepali <So...@imail.org> on 2011/03/16 21:41:40 UTC

Exposing the Original Wsdl instead of the implementation in Jaxws-endpoint

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"/>

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.



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





RE: Exposing the Original Wsdl instead of the implementation in Jaxws-endpoint

Posted by Sonam Nepali <So...@imail.org>.
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:dkulp@apache.org] 
Sent: Wednesday, March 16, 2011 5:54 PM
To: users@cxf.apache.org
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:dkulp@apache.org]
> Sent: Wednesday, March 16, 2011 3:02 PM
> To: users@cxf.apache.org
> 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
dkulp@apache.org
http://dankulp.com/blog
Talend - http://www.talend.com

Re: Exposing the Original Wsdl instead of the implementation in Jaxws-endpoint

Posted by Daniel Kulp <dk...@apache.org>.
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:dkulp@apache.org]
> Sent: Wednesday, March 16, 2011 3:02 PM
> To: users@cxf.apache.org
> 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
dkulp@apache.org
http://dankulp.com/blog
Talend - http://www.talend.com

RE: Exposing the Original Wsdl instead of the implementation in Jaxws-endpoint

Posted by Sonam Nepali <So...@imail.org>.
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:

...
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:dkulp@apache.org] 
Sent: Wednesday, March 16, 2011 3:02 PM
To: users@cxf.apache.org
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
dkulp@apache.org
http://dankulp.com/blog
Talend - http://www.talend.com

Re: Exposing the Original Wsdl instead of the implementation in Jaxws-endpoint

Posted by Daniel Kulp <dk...@apache.org>.
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
dkulp@apache.org
http://dankulp.com/blog
Talend - http://www.talend.com