Ok, then you say it is possible to change the context "cxf" after 2.2.4, but how is it done?
dkulp wrote: > > On Tue October 6 2009 3:50:42 pm warrior389 wrote: >> I'm using servicemix (fuse 4.1.0.2) with cxf 2.2.2.1-fuse and the cxf >> osgi >> transport 4.1.0.2-fuse on a windows machine with jdk 6u16. >> >> I'm trying to make a simple jaxws service like the servicemix >> http://servicemix.apache.org/SMX4/cxf-examples.html cxf-osgi example . >> Something like: >> >> <jaxws:endpoint >> id="helloWorld" >> implementor="org.apache.servicemix.examples.cxf.HelloWorldImpl" >> address="/HelloWorld"/> >> >> and the WebService annotations are simple. Just @WebService on the >> @WebService(endpointInterface = >> "org.apache.servicemix.examples.cxf.HelloWorld") on the implementation. >> >> The example page I linked earlier says that the service should be >> published >> at http://localhost:8080/cxf/HelloWorld?wsdl, but for me its at a >> different >> port, http://localhost:8181/cxf/HelloWorld?wsdl. I had to netstat to >> find >> what port it was listening on. I can access the WSDL fine and exercise >> it >> with SoapUI, and the example client. > > Well, this really depends on which http transport you use and the > container > it's deployed in (if any). There really are three options: > > 1) The "built in" http-jetty HTTP transport. In this case, the "address" > in > the config would be a full address (like > http://localhost:8080/HelloWorld") > and we would bring up Jetty on that exact port and stick the endpoint at > that > exact address. We control everything and can do this. With the sample > you > mentioned above, if you change the <import> in the config from the osgi > http > to the cxf-extension-http-jetty.xml file, this should work (providing > jetty > bundles are available) > > 2) Servlet transport - in this case, a separate servlet engine is > providing > the http capabilities and a servlet is registered to handle things. In > this > case, the port is completely controlled by the servlet engine (like tomcat > defaults to 8080). Also, the application context and servlet context are > controlled by the war name and the config in the web.xml. The servlet > (and > thus us), have no control over that. What worse, we don't even know > those > things until request time. In this case, the address is like above > ("/HelloWorld"), but the full url is the based on the host/port configured > in > the servlet container + the app context (normally the war name) + servlet > context (configured in the wars web.xml) + the above address. Example: > http://localhost:8080/myapp/services/HelloWorld > > 3) OSGi transport - this is what you are using above. It's very similar > to > the servlet transport. The port is controlled by the osgi container. In > your case, smx defaults to 8181. The context currently is hard coded to > "cxf", but with 2.2.4, we've moved the OSGI transport from smx into cxf > and > added some OSGI config service things for it so you can change that. > > >> So, I have four questions: >> 1. Why is the port different (8080 vs 8181), and how is it determined? >> 2. Why is the service at /cxf/HelloWorld, when the jaxws endpoint >> definition said it is at /HelloWorld? I assume some kind of cxf context >> is >> prepended, but how is this controlled and where? And can I override it >> in >> my service configuration, either spring or annotation? > > See above. > >> 3. This is probably the most important. How can my service know what >> its >> actual location is? Even if I grab the WebServiceContext using a >> @Resource >> annotation, it only gives me an address of /HelloWorld, not the full >> http://localhost:8181/cxf/HelloWorld?wsdl. I want to be able to register >> the service in UDDI. > > UNFORTUNATLY, due to limitations in the Servlet specs and such, there is > not a > way to know it until the first time someone actually hits the service. > :-( > What's worse, it can be different from request to request. For example, > the > container can be configured to listen on both 8080 and 9090 and requests > can > come in from both. > > > Dan > >> 4. If I change the address from /HelloWorld to nmr:HelloWorld, how would >> the service know its endpoint? > > > > -- > Daniel Kulp > [email protected] > http://www.dankulp.com/blog > > -- View this message in context: http://www.nabble.com/How-can-a-jaxws-service-know-its-location--tp25775479p25994411.html Sent from the cxf-user mailing list archive at Nabble.com.
