You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Serethos <Se...@web.de> on 2008/06/26 17:31:38 UTC

Using CXF with Jetty Servlet Transport

Hello!

I need to get the Servlet Transport of CXF and Jetty to work together but
have several problems with it.
Searching within forums, mailing lists and the inet there is often mentioned
the complete source the to code snippet example of the user doc
(http://cwiki.apache.org/CXF20DOC/servlet-transport.html).
The problem ist that the links to the cxf repository are always dead (like
this one:
https://svn.apache.org/repos/asf/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/servlet/NoSpringServletServer.java
)

Is there any source to get all classes of the example so that I can test it
and exclude an error of mine?


As addition I want to attach my StackStrace of the error. Perhaps someone
could give me a hint, what the problem could be (and what an
'AnnotationVisitor' is)

an AnnotationVisitor
(org.apache.cxf.common.injection.ResourceInjector@383118) raised an
exception on element public void
org.apache.cxf.transport.jms.JMSTransportFactory.setBus(org.apache.cxf.Bus).
java.lang.NullPointerException
	at javax.naming.InitialContext.getURLScheme(InitialContext.java:269)
	at
javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:318)
	at javax.naming.InitialContext.lookup(InitialContext.java:392)
	at
org.apache.cxf.transport.servlet.ServletContextResourceResolver.resolve(ServletContextResourceResolver.java:62)
	at
org.apache.cxf.resource.DefaultResourceManager.findResource(DefaultResourceManager.java:99)
	at
org.apache.cxf.resource.DefaultResourceManager.resolveResource(DefaultResourceManager.java:55)
	at
org.apache.cxf.common.injection.ResourceInjector.resolveResource(ResourceInjector.java:401)
	at
org.apache.cxf.common.injection.ResourceInjector.visitMethod(ResourceInjector.java:185)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at
org.apache.cxf.common.annotation.AnnotationProcessor.visitAnnotatedElement(AnnotationProcessor.java:131)
	at
org.apache.cxf.common.annotation.AnnotationProcessor.processMethods(AnnotationProcessor.java:103)
	at
org.apache.cxf.common.annotation.AnnotationProcessor.accept(AnnotationProcessor.java:90)
	at
org.apache.cxf.common.injection.ResourceInjector.inject(ResourceInjector.java:81)
	at
org.apache.cxf.common.injection.ResourceInjector.inject(ResourceInjector.java:76)
	at
org.apache.cxf.bus.extension.ExtensionManagerImpl.loadAndRegister(ExtensionManagerImpl.java:165)
	at
org.apache.cxf.bus.extension.ExtensionManagerImpl.activateViaNS(ExtensionManagerImpl.java:86)
	at
org.apache.cxf.bus.extension.ExtensionManagerImpl.activateAll(ExtensionManagerImpl.java:94)
	at org.apache.cxf.bus.extension.DeferredMap.undefer(DeferredMap.java:36)
	at
org.apache.cxf.transport.DestinationFactoryManagerImpl.getDestinationFactoryForUri(DestinationFactoryManagerImpl.java:136)
	at
org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpointInfo(AbstractWSDLBasedEndpointFactory.java:160)
	at
org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:102)
	at
org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:114)
	at
org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:160)
	at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:322)
	at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:244)
	at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:194)
	at
org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:84)
	at javax.xml.ws.Endpoint.publish(Endpoint.java:170)
	at xoz.JettyServletLauncher.main(JettyServletLauncher.java:55)
-- 
View this message in context: http://www.nabble.com/Using-CXF-with-Jetty-Servlet-Transport-tp18136831p18136831.html
Sent from the cxf-user mailing list archive at Nabble.com.


Re: Using CXF with Jetty Servlet Transport

Posted by Ulhas Bhole <ul...@iona.com>.
Hi Serethos,

You are picking up JMS transport and not servlet. Make sure you have 
proper URI in your wsdl service and endpoint.publish() call.

Regards,

Ulhas Bhole

Serethos wrote:
> Hello!
>
> I need to get the Servlet Transport of CXF and Jetty to work together but
> have several problems with it.
> Searching within forums, mailing lists and the inet there is often mentioned
> the complete source the to code snippet example of the user doc
> (http://cwiki.apache.org/CXF20DOC/servlet-transport.html).
> The problem ist that the links to the cxf repository are always dead (like
> this one:
> https://svn.apache.org/repos/asf/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/servlet/NoSpringServletServer.java
> )
>
> Is there any source to get all classes of the example so that I can test it
> and exclude an error of mine?
>
>
> As addition I want to attach my StackStrace of the error. Perhaps someone
> could give me a hint, what the problem could be (and what an
> 'AnnotationVisitor' is)
>
> an AnnotationVisitor
> (org.apache.cxf.common.injection.ResourceInjector@383118) raised an
> exception on element public void
> org.apache.cxf.transport.jms.JMSTransportFactory.setBus(org.apache.cxf.Bus).
> java.lang.NullPointerException
> 	at javax.naming.InitialContext.getURLScheme(InitialContext.java:269)
> 	at
> javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:318)
> 	at javax.naming.InitialContext.lookup(InitialContext.java:392)
> 	at
> org.apache.cxf.transport.servlet.ServletContextResourceResolver.resolve(ServletContextResourceResolver.java:62)
> 	at
> org.apache.cxf.resource.DefaultResourceManager.findResource(DefaultResourceManager.java:99)
> 	at
> org.apache.cxf.resource.DefaultResourceManager.resolveResource(DefaultResourceManager.java:55)
> 	at
> org.apache.cxf.common.injection.ResourceInjector.resolveResource(ResourceInjector.java:401)
> 	at
> org.apache.cxf.common.injection.ResourceInjector.visitMethod(ResourceInjector.java:185)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:597)
> 	at
> org.apache.cxf.common.annotation.AnnotationProcessor.visitAnnotatedElement(AnnotationProcessor.java:131)
> 	at
> org.apache.cxf.common.annotation.AnnotationProcessor.processMethods(AnnotationProcessor.java:103)
> 	at
> org.apache.cxf.common.annotation.AnnotationProcessor.accept(AnnotationProcessor.java:90)
> 	at
> org.apache.cxf.common.injection.ResourceInjector.inject(ResourceInjector.java:81)
> 	at
> org.apache.cxf.common.injection.ResourceInjector.inject(ResourceInjector.java:76)
> 	at
> org.apache.cxf.bus.extension.ExtensionManagerImpl.loadAndRegister(ExtensionManagerImpl.java:165)
> 	at
> org.apache.cxf.bus.extension.ExtensionManagerImpl.activateViaNS(ExtensionManagerImpl.java:86)
> 	at
> org.apache.cxf.bus.extension.ExtensionManagerImpl.activateAll(ExtensionManagerImpl.java:94)
> 	at org.apache.cxf.bus.extension.DeferredMap.undefer(DeferredMap.java:36)
> 	at
> org.apache.cxf.transport.DestinationFactoryManagerImpl.getDestinationFactoryForUri(DestinationFactoryManagerImpl.java:136)
> 	at
> org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpointInfo(AbstractWSDLBasedEndpointFactory.java:160)
> 	at
> org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:102)
> 	at
> org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:114)
> 	at
> org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:160)
> 	at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:322)
> 	at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:244)
> 	at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:194)
> 	at
> org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:84)
> 	at javax.xml.ws.Endpoint.publish(Endpoint.java:170)
> 	at xoz.JettyServletLauncher.main(JettyServletLauncher.java:55)
>   

----------------------------
IONA Technologies PLC (registered in Ireland)
Registered Number: 171387
Registered Address: The IONA Building, Shelbourne Road, Dublin 4, Ireland

Re: Using CXF with Jetty Servlet Transport

Posted by Ulhas Bhole <ul...@iona.com>.
I don't know much about the servlet transport but default transport for 
CXF is http so I think you don't need to do anything special.
If that is not the case then certainly something has changed in the way 
the transport is determined and might possibly be a bug.
Can you create a small test which don't use jms:// address but CXF still 
would pickup JMS transport?

Regards,

Ulhas Bhole

Serethos wrote:
> Thanks for your replies. But I would like to come back to some questions I
> asked before. There is this big difference in using the CXFServlet and the
> CXFNonSpringServlet in how you have to define the Soap-Context so that the
> HTTP Transport is chosen instead of the jms (please see my last postings).
> My examples are according to the user's guide, which is in some ways a
> little confusing. So I want to exclude a misconfiguration. Can someone
> confirm my experiences so that I can create a bug entry?
>
>
>
> willem.jiang wrote:
>   
>> If you don't want to use Spring to wire the components in the CXF Bus , 
>> you can use CXFNoSpringServlet for the servlet transport initiation.  
>> Otherwise please use the CXFServlet because you can leverage Spring 
>> configuration file to publish your service endpoints.
>>
>> BTW, if you are using the CXF module jars, you could just remove the 
>> cxf-rt-transport-jms* jar from your class path and it will not bother 
>> you anymore.
>>
>> Willem
>>
>> Serethos wrote:
>>     
>>> Hello,
>>>
>>> now I have discovered a very interesting Point: 
>>> According to the Jetty-NoSpring-Servlet-Transport tutorial I used the
>>> CXFNoSpringServlet. But if I use the normal CXFServlet the protocol http
>>> is
>>> automatically chosen!
>>> This makes absolutely no sense:
>>> How can I configure the CXFNoSpringServlet to use http (leaving the
>>> relative
>>> service path for jetty)?
>>> Why should I choose CXFNoSpringServlet when CXFServlet does the same job?
>>>
>>>
>>>
>>> Serethos wrote:
>>>   
>>>       
>>>> Hello,
>>>>
>>>> first of all: thanks for your effort.
>>>>
>>>> Another time I digged through the example from the link you posted. It's
>>>> quite the same thing
>>>> I tried before and produces the same result:
>>>> Not giving the http:// -Protocol-Prefix ends in a misconfiguration of
>>>> using JMS instead of servlet/http
>>>> transport. But this is how the example works.
>>>> Moreover it is very odd that giving a fully qualified URI _without_ port
>>>> leads to an wsdl. Using
>>>> a port does not.
>>>>
>>>>
>>>>
>>>> Ulhas Bhole wrote:
>>>>     
>>>>         
>>>>> Hi Serentos,
>>>>>
>>>>> I have added users@cxf.apache.org so that others will have chance to 
>>>>> look at your mail and respond to it.
>>>>> I don't know much about servlet transport but as far as I remember CXF 
>>>>> will match the URI prefix (e.g. http:// or jms:// or local://) with the 
>>>>> URI prefix returned by TransportFactories that are instantiated and
>>>>> will 
>>>>> choose the transport based on that.
>>>>>
>>>>> For servlet transport I would suggest you take a look at system test in 
>>>>> CXF source here 
>>>>> http://svn.apache.org/repos/asf/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/servlet/
>>>>>
>>>>> Regards,
>>>>>
>>>>> Ulhas Bhole
>>>>>
>>>>> Serethos@web.de wrote:
>>>>>       
>>>>>           
>>>>>> At the moment my attempts and results are very confusing.
>>>>>> So I will try to describe my approach. 
>>>>>>
>>>>>> First, the Webservice Interface:
>>>>>>
>>>>>> @WebService
>>>>>> public interface HelloWorld
>>>>>> {
>>>>>>     String sayHi(@WebParam(name="text") String text);
>>>>>> }
>>>>>>  
>>>>>> The implementing Service:
>>>>>>
>>>>>> @WebService(endpointInterface = "webservices.HelloWorld", serviceName
>>>>>> =
>>>>>> "hello")
>>>>>> public class HelloWorldImplementation implements HelloWorld
>>>>>> {
>>>>>>     @Override
>>>>>>     public String sayHi(String text)
>>>>>>     {
>>>>>>         return "waaaaazzzzuuuuuupp?! you said: " + text;
>>>>>>     }
>>>>>> } 
>>>>>>
>>>>>> The Servlet which shall control the Transport:
>>>>>>
>>>>>> public class HelloWorldServlet extends CXFNonSpringServlet implements
>>>>>> Servlet
>>>>>> {
>>>>>>     @Override
>>>>>>     public void loadBus(ServletConfig servletConfig) throws
>>>>>> ServletException
>>>>>>     {
>>>>>>         super.loadBus(servletConfig);
>>>>>>         
>>>>>>         Bus bus = getBus();
>>>>>>         BusFactory.setDefaultBus(bus);
>>>>>>         HelloWorldImplementation service = new
>>>>>> HelloWorldImplementation();
>>>>>>         Endpoint.publish("/testService", service);
>>>>>>     }
>>>>>> }
>>>>>>
>>>>>> An finally the Server with its publishing mechanism:
>>>>>>
>>>>>> public class JettyServletLauncher
>>>>>> {
>>>>>>     public static void main(String args[])
>>>>>>     {
>>>>>> //        String busFactory =
>>>>>> System.getProperty(BusFactory.BUS_FACTORY_PROPERTY_NAME);
>>>>>>         System.setProperty(BusFactory.BUS_FACTORY_PROPERTY_NAME,
>>>>>> "org.apache.cxf.bus.CXFBusFactory");
>>>>>>         
>>>>>>         Server server = new Server(8080);    
>>>>>>         Context root = new Context(server, "/", Context.SESSIONS);
>>>>>>         HelloWorldServlet nonSpringServlet = new HelloWorldServlet();
>>>>>>         root.addServlet(new ServletHolder(nonSpringServlet), "/*");
>>>>>>         
>>>>>>         try
>>>>>>         {
>>>>>>             server.start();
>>>>>>         }
>>>>>>         catch (Exception e)
>>>>>>         {
>>>>>>             e.printStackTrace();
>>>>>>         }
>>>>>>       
>>>>>>     }
>>>>>> }
>>>>>>
>>>>>> Now to my masses of questions:
>>>>>>
>>>>>> 1. If I get it right, CXF detects if a jetty/ webserver instance is
>>>>>> already bound. In my case, I start
>>>>>> jetty @ port:8080 with its root as context path. From my experiences I
>>>>>> am used to bin the soap service
>>>>>> url as relative path which is added to the jetty's context path. In my
>>>>>> example /testService, so that the
>>>>>> services should be bound to http://localhost:8080/testService?wsdl,
>>>>>> the
>>>>>> service itself is mapped to the
>>>>>> name "hello".
>>>>>> This raises the exception I mentioned before, where you detected the
>>>>>> problem of the wrong protocol:
>>>>>> an AnnotationVisitor
>>>>>> (org.apache.cxf.common.injection.ResourceInjector@105691e) raised an
>>>>>> exception on element 
>>>>>> public void
>>>>>> org.apache.cxf.transport.jms.JMSTransportFactory.setBus(org.apache.cxf.Bus)
>>>>>>
>>>>>> You suggest to control the URIs again which are published through the
>>>>>> endpoint. But why should I add the
>>>>>> protocol within the Endpoint.publish method?
>>>>>> But if I do so, it seems that http-transport is chosen:
>>>>>>
>>>>>> Endpoint.publish("http://localhost:8080/testService", service);
>>>>>>
>>>>>> This URI seems redundant to me, because the port and the root path is
>>>>>> already defined by the jetty configuration.
>>>>>>
>>>>>> But the problem isn't solved then: accessing localhost:8080 gives me
>>>>>> an
>>>>>> hyperlink:
>>>>>> {http://webservices/}HelloWorldImplementationPort
>>>>>> which references:
>>>>>> http://localhost:8080/testService?wsdl    - resulting in a message "No
>>>>>> service was found."
>>>>>>
>>>>>> I am especially wondering how (name of) the hyperlink is created ..
>>>>>>
>>>>>> just tried another thing:
>>>>>> Endpoint.publish("http://localhost/testService", service); // notice:
>>>>>> no
>>>>>> port
>>>>>>
>>>>>> This works (I get a wsdl)! But now an IllegalStateException from the
>>>>>> servlet is thrown ..
>>>>>> java.lang.IllegalStateException: STREAM
>>>>>> 	at org.mortbay.jetty.Response.getWriter(Response.java:585)
>>>>>>
>>>>>> 2. As comparison I used the internally started jetty, the main code
>>>>>> reduces then to this:
>>>>>>
>>>>>> CXFNonSpringServlet servlet = new CXFNonSpringServlet();
>>>>>> BusFactory.setDefaultBus(servlet.getBus());
>>>>>> HelloWorldImplementation service = new HelloWorldImplementation();
>>>>>> Endpoint.publish("http://localhost:8080/testService", service);
>>>>>> JOptionPane.showMessageDialog(null, "Stop Server");
>>>>>>
>>>>>> This works pretty good, the URI http://localhost:8080/testService?wsdl
>>>>>> creates a valid wsdl.
>>>>>>
>>>>>> 3. My main problems seems to be the choice of the transport protocol,
>>>>>> where JMS is used. Is this configuration
>>>>>> only dependend on the URI I use by the endpoint publishing?
>>>>>>
>>>>>> 4. There is one point within the use of the framework, I do not
>>>>>> understand:
>>>>>> The Endpoint class is from the JDK. Enpoint.publish() uses the
>>>>>> Provider-factory to get EndpointImpl for publishing
>>>>>> the service. Where and at which point is the Endpoint-Implementation
>>>>>> of
>>>>>> CXF injected?
>>>>>>
>>>>>> Many thanks in advance for digging through my questions!
>>>>>>
>>>>>>
>>>>>> Ulhas Bhole wrote:
>>>>>>   
>>>>>>         
>>>>>>             
>>>>>>> Hi Serethos,
>>>>>>>
>>>>>>> You are picking up JMS transport and not servlet. Make sure you have 
>>>>>>> proper URI in your wsdl service and endpoint.publish() call.
>>>>>>>
>>>>>>> Regards,
>>>>>>>
>>>>>>> Ulhas Bhole
>>>>>>>
>>>>>>> Serethos wrote:
>>>>>>>     
>>>>>>>           
>>>>>>>               
>>>>>>>> Hello!
>>>>>>>>
>>>>>>>> I need to get the Servlet Transport of CXF and Jetty to work
>>>>>>>> together
>>>>>>>> but
>>>>>>>> have several problems with it.
>>>>>>>> Searching within forums, mailing lists and the inet there is often
>>>>>>>> mentioned
>>>>>>>> the complete source the to code snippet example of the user doc
>>>>>>>> (http://cwiki.apache.org/CXF20DOC/servlet-transport.html).
>>>>>>>> The problem ist that the links to the cxf repository are always dead
>>>>>>>> (like
>>>>>>>> this one:
>>>>>>>> https://svn.apache.org/repos/asf/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/servlet/NoSpringServletServer.java
>>>>>>>> )
>>>>>>>>
>>>>>>>> Is there any source to get all classes of the example so that I can
>>>>>>>> test
>>>>>>>> it
>>>>>>>> and exclude an error of mine?
>>>>>>>>
>>>>>>>>
>>>>>>>> As addition I want to attach my StackStrace of the error. Perhaps
>>>>>>>> someone
>>>>>>>> could give me a hint, what the problem could be (and what an
>>>>>>>> 'AnnotationVisitor' is)
>>>>>>>>
>>>>>>>> an AnnotationVisitor
>>>>>>>> (org.apache.cxf.common.injection.ResourceInjector@383118) raised an
>>>>>>>> exception on element public void
>>>>>>>> org.apache.cxf.transport.jms.JMSTransportFactory.setBus(org.apache.cxf.Bus).
>>>>>>>> java.lang.NullPointerException
>>>>>>>> 	at
>>>>>>>> javax.naming.InitialContext.getURLScheme(InitialContext.java:269)
>>>>>>>> 	at
>>>>>>>> javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:318)
>>>>>>>> 	at javax.naming.InitialContext.lookup(InitialContext.java:392)
>>>>>>>> 	at
>>>>>>>> org.apache.cxf.transport.servlet.ServletContextResourceResolver.resolve(ServletContextResourceResolver.java:62)
>>>>>>>> 	at
>>>>>>>> org.apache.cxf.resource.DefaultResourceManager.findResource(DefaultResourceManager.java:99)
>>>>>>>> 	at
>>>>>>>> org.apache.cxf.resource.DefaultResourceManager.resolveResource(DefaultResourceManager.java:55)
>>>>>>>> 	at
>>>>>>>> org.apache.cxf.common.injection.ResourceInjector.resolveResource(ResourceInjector.java:401)
>>>>>>>> 	at
>>>>>>>> org.apache.cxf.common.injection.ResourceInjector.visitMethod(ResourceInjector.java:185)
>>>>>>>> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>>>>> 	at
>>>>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>>>>>>> 	at
>>>>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>>>>>>> 	at java.lang.reflect.Method.invoke(Method.java:597)
>>>>>>>> 	at
>>>>>>>> org.apache.cxf.common.annotation.AnnotationProcessor.visitAnnotatedElement(AnnotationProcessor.java:131)
>>>>>>>> 	at
>>>>>>>> org.apache.cxf.common.annotation.AnnotationProcessor.processMethods(AnnotationProcessor.java:103)
>>>>>>>> 	at
>>>>>>>> org.apache.cxf.common.annotation.AnnotationProcessor.accept(AnnotationProcessor.java:90)
>>>>>>>> 	at
>>>>>>>> org.apache.cxf.common.injection.ResourceInjector.inject(ResourceInjector.java:81)
>>>>>>>> 	at
>>>>>>>> org.apache.cxf.common.injection.ResourceInjector.inject(ResourceInjector.java:76)
>>>>>>>> 	at
>>>>>>>> org.apache.cxf.bus.extension.ExtensionManagerImpl.loadAndRegister(ExtensionManagerImpl.java:165)
>>>>>>>> 	at
>>>>>>>> org.apache.cxf.bus.extension.ExtensionManagerImpl.activateViaNS(ExtensionManagerImpl.java:86)
>>>>>>>> 	at
>>>>>>>> org.apache.cxf.bus.extension.ExtensionManagerImpl.activateAll(ExtensionManagerImpl.java:94)
>>>>>>>> 	at
>>>>>>>> org.apache.cxf.bus.extension.DeferredMap.undefer(DeferredMap.java:36)
>>>>>>>> 	at
>>>>>>>> org.apache.cxf.transport.DestinationFactoryManagerImpl.getDestinationFactoryForUri(DestinationFactoryManagerImpl.java:136)
>>>>>>>> 	at
>>>>>>>> org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpointInfo(AbstractWSDLBasedEndpointFactory.java:160)
>>>>>>>> 	at
>>>>>>>> org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:102)
>>>>>>>> 	at
>>>>>>>> org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:114)
>>>>>>>> 	at
>>>>>>>> org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:160)
>>>>>>>> 	at
>>>>>>>> org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:322)
>>>>>>>> 	at
>>>>>>>> org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:244)
>>>>>>>> 	at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:194)
>>>>>>>> 	at
>>>>>>>> org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:84)
>>>>>>>> 	at javax.xml.ws.Endpoint.publish(Endpoint.java:170)
>>>>>>>> 	at xoz.JettyServletLauncher.main(JettyServletLauncher.java:55)
>>>>>>>>   
>>>>>>>>       
>>>>>>>>             
>>>>>>>>                 
>>>>>>> ----------------------------
>>>>>>> IONA Technologies PLC (registered in Ireland)
>>>>>>> Registered Number: 171387
>>>>>>> Registered Address: The IONA Building, Shelbourne Road, Dublin 4,
>>>>>>> Ireland
>>>>>>>
>>>>>>>
>>>>>>>     
>>>>>>>           
>>>>>>>               
>>>>>> Quoted from: 
>>>>>> http://www.nabble.com/Using-CXF-with-Jetty-Servlet-Transport-tp18136831p18137167.html
>>>>>>   
>>>>>>         
>>>>>>             
>>>>> ----------------------------
>>>>> IONA Technologies PLC (registered in Ireland)
>>>>> Registered Number: 171387
>>>>> Registered Address: The IONA Building, Shelbourne Road, Dublin 4,
>>>>> Ireland
>>>>>
>>>>>
>>>>>       
>>>>>           
>>>>     
>>>>         
>>>   
>>>       
>>
>>     
>
>   

----------------------------
IONA Technologies PLC (registered in Ireland)
Registered Number: 171387
Registered Address: The IONA Building, Shelbourne Road, Dublin 4, Ireland

Re: Using CXF with Jetty Servlet Transport

Posted by Serethos <Se...@web.de>.
Thanks for your replies. But I would like to come back to some questions I
asked before. There is this big difference in using the CXFServlet and the
CXFNonSpringServlet in how you have to define the Soap-Context so that the
HTTP Transport is chosen instead of the jms (please see my last postings).
My examples are according to the user's guide, which is in some ways a
little confusing. So I want to exclude a misconfiguration. Can someone
confirm my experiences so that I can create a bug entry?



willem.jiang wrote:
> 
> If you don't want to use Spring to wire the components in the CXF Bus , 
> you can use CXFNoSpringServlet for the servlet transport initiation.  
> Otherwise please use the CXFServlet because you can leverage Spring 
> configuration file to publish your service endpoints.
> 
> BTW, if you are using the CXF module jars, you could just remove the 
> cxf-rt-transport-jms* jar from your class path and it will not bother 
> you anymore.
> 
> Willem
> 
> Serethos wrote:
>> Hello,
>>
>> now I have discovered a very interesting Point: 
>> According to the Jetty-NoSpring-Servlet-Transport tutorial I used the
>> CXFNoSpringServlet. But if I use the normal CXFServlet the protocol http
>> is
>> automatically chosen!
>> This makes absolutely no sense:
>> How can I configure the CXFNoSpringServlet to use http (leaving the
>> relative
>> service path for jetty)?
>> Why should I choose CXFNoSpringServlet when CXFServlet does the same job?
>>
>>
>>
>> Serethos wrote:
>>   
>>> Hello,
>>>
>>> first of all: thanks for your effort.
>>>
>>> Another time I digged through the example from the link you posted. It's
>>> quite the same thing
>>> I tried before and produces the same result:
>>> Not giving the http:// -Protocol-Prefix ends in a misconfiguration of
>>> using JMS instead of servlet/http
>>> transport. But this is how the example works.
>>> Moreover it is very odd that giving a fully qualified URI _without_ port
>>> leads to an wsdl. Using
>>> a port does not.
>>>
>>>
>>>
>>> Ulhas Bhole wrote:
>>>     
>>>> Hi Serentos,
>>>>
>>>> I have added users@cxf.apache.org so that others will have chance to 
>>>> look at your mail and respond to it.
>>>> I don't know much about servlet transport but as far as I remember CXF 
>>>> will match the URI prefix (e.g. http:// or jms:// or local://) with the 
>>>> URI prefix returned by TransportFactories that are instantiated and
>>>> will 
>>>> choose the transport based on that.
>>>>
>>>> For servlet transport I would suggest you take a look at system test in 
>>>> CXF source here 
>>>> http://svn.apache.org/repos/asf/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/servlet/
>>>>
>>>> Regards,
>>>>
>>>> Ulhas Bhole
>>>>
>>>> Serethos@web.de wrote:
>>>>       
>>>>> At the moment my attempts and results are very confusing.
>>>>> So I will try to describe my approach. 
>>>>>
>>>>> First, the Webservice Interface:
>>>>>
>>>>> @WebService
>>>>> public interface HelloWorld
>>>>> {
>>>>>     String sayHi(@WebParam(name="text") String text);
>>>>> }
>>>>>  
>>>>> The implementing Service:
>>>>>
>>>>> @WebService(endpointInterface = "webservices.HelloWorld", serviceName
>>>>> =
>>>>> "hello")
>>>>> public class HelloWorldImplementation implements HelloWorld
>>>>> {
>>>>>     @Override
>>>>>     public String sayHi(String text)
>>>>>     {
>>>>>         return "waaaaazzzzuuuuuupp?! you said: " + text;
>>>>>     }
>>>>> } 
>>>>>
>>>>> The Servlet which shall control the Transport:
>>>>>
>>>>> public class HelloWorldServlet extends CXFNonSpringServlet implements
>>>>> Servlet
>>>>> {
>>>>>     @Override
>>>>>     public void loadBus(ServletConfig servletConfig) throws
>>>>> ServletException
>>>>>     {
>>>>>         super.loadBus(servletConfig);
>>>>>         
>>>>>         Bus bus = getBus();
>>>>>         BusFactory.setDefaultBus(bus);
>>>>>         HelloWorldImplementation service = new
>>>>> HelloWorldImplementation();
>>>>>         Endpoint.publish("/testService", service);
>>>>>     }
>>>>> }
>>>>>
>>>>> An finally the Server with its publishing mechanism:
>>>>>
>>>>> public class JettyServletLauncher
>>>>> {
>>>>>     public static void main(String args[])
>>>>>     {
>>>>> //        String busFactory =
>>>>> System.getProperty(BusFactory.BUS_FACTORY_PROPERTY_NAME);
>>>>>         System.setProperty(BusFactory.BUS_FACTORY_PROPERTY_NAME,
>>>>> "org.apache.cxf.bus.CXFBusFactory");
>>>>>         
>>>>>         Server server = new Server(8080);    
>>>>>         Context root = new Context(server, "/", Context.SESSIONS);
>>>>>         HelloWorldServlet nonSpringServlet = new HelloWorldServlet();
>>>>>         root.addServlet(new ServletHolder(nonSpringServlet), "/*");
>>>>>         
>>>>>         try
>>>>>         {
>>>>>             server.start();
>>>>>         }
>>>>>         catch (Exception e)
>>>>>         {
>>>>>             e.printStackTrace();
>>>>>         }
>>>>>       
>>>>>     }
>>>>> }
>>>>>
>>>>> Now to my masses of questions:
>>>>>
>>>>> 1. If I get it right, CXF detects if a jetty/ webserver instance is
>>>>> already bound. In my case, I start
>>>>> jetty @ port:8080 with its root as context path. From my experiences I
>>>>> am used to bin the soap service
>>>>> url as relative path which is added to the jetty's context path. In my
>>>>> example /testService, so that the
>>>>> services should be bound to http://localhost:8080/testService?wsdl,
>>>>> the
>>>>> service itself is mapped to the
>>>>> name "hello".
>>>>> This raises the exception I mentioned before, where you detected the
>>>>> problem of the wrong protocol:
>>>>> an AnnotationVisitor
>>>>> (org.apache.cxf.common.injection.ResourceInjector@105691e) raised an
>>>>> exception on element 
>>>>> public void
>>>>> org.apache.cxf.transport.jms.JMSTransportFactory.setBus(org.apache.cxf.Bus)
>>>>>
>>>>> You suggest to control the URIs again which are published through the
>>>>> endpoint. But why should I add the
>>>>> protocol within the Endpoint.publish method?
>>>>> But if I do so, it seems that http-transport is chosen:
>>>>>
>>>>> Endpoint.publish("http://localhost:8080/testService", service);
>>>>>
>>>>> This URI seems redundant to me, because the port and the root path is
>>>>> already defined by the jetty configuration.
>>>>>
>>>>> But the problem isn't solved then: accessing localhost:8080 gives me
>>>>> an
>>>>> hyperlink:
>>>>> {http://webservices/}HelloWorldImplementationPort
>>>>> which references:
>>>>> http://localhost:8080/testService?wsdl    - resulting in a message "No
>>>>> service was found."
>>>>>
>>>>> I am especially wondering how (name of) the hyperlink is created ..
>>>>>
>>>>> just tried another thing:
>>>>> Endpoint.publish("http://localhost/testService", service); // notice:
>>>>> no
>>>>> port
>>>>>
>>>>> This works (I get a wsdl)! But now an IllegalStateException from the
>>>>> servlet is thrown ..
>>>>> java.lang.IllegalStateException: STREAM
>>>>> 	at org.mortbay.jetty.Response.getWriter(Response.java:585)
>>>>>
>>>>> 2. As comparison I used the internally started jetty, the main code
>>>>> reduces then to this:
>>>>>
>>>>> CXFNonSpringServlet servlet = new CXFNonSpringServlet();
>>>>> BusFactory.setDefaultBus(servlet.getBus());
>>>>> HelloWorldImplementation service = new HelloWorldImplementation();
>>>>> Endpoint.publish("http://localhost:8080/testService", service);
>>>>> JOptionPane.showMessageDialog(null, "Stop Server");
>>>>>
>>>>> This works pretty good, the URI http://localhost:8080/testService?wsdl
>>>>> creates a valid wsdl.
>>>>>
>>>>> 3. My main problems seems to be the choice of the transport protocol,
>>>>> where JMS is used. Is this configuration
>>>>> only dependend on the URI I use by the endpoint publishing?
>>>>>
>>>>> 4. There is one point within the use of the framework, I do not
>>>>> understand:
>>>>> The Endpoint class is from the JDK. Enpoint.publish() uses the
>>>>> Provider-factory to get EndpointImpl for publishing
>>>>> the service. Where and at which point is the Endpoint-Implementation
>>>>> of
>>>>> CXF injected?
>>>>>
>>>>> Many thanks in advance for digging through my questions!
>>>>>
>>>>>
>>>>> Ulhas Bhole wrote:
>>>>>   
>>>>>         
>>>>>> Hi Serethos,
>>>>>>
>>>>>> You are picking up JMS transport and not servlet. Make sure you have 
>>>>>> proper URI in your wsdl service and endpoint.publish() call.
>>>>>>
>>>>>> Regards,
>>>>>>
>>>>>> Ulhas Bhole
>>>>>>
>>>>>> Serethos wrote:
>>>>>>     
>>>>>>           
>>>>>>> Hello!
>>>>>>>
>>>>>>> I need to get the Servlet Transport of CXF and Jetty to work
>>>>>>> together
>>>>>>> but
>>>>>>> have several problems with it.
>>>>>>> Searching within forums, mailing lists and the inet there is often
>>>>>>> mentioned
>>>>>>> the complete source the to code snippet example of the user doc
>>>>>>> (http://cwiki.apache.org/CXF20DOC/servlet-transport.html).
>>>>>>> The problem ist that the links to the cxf repository are always dead
>>>>>>> (like
>>>>>>> this one:
>>>>>>> https://svn.apache.org/repos/asf/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/servlet/NoSpringServletServer.java
>>>>>>> )
>>>>>>>
>>>>>>> Is there any source to get all classes of the example so that I can
>>>>>>> test
>>>>>>> it
>>>>>>> and exclude an error of mine?
>>>>>>>
>>>>>>>
>>>>>>> As addition I want to attach my StackStrace of the error. Perhaps
>>>>>>> someone
>>>>>>> could give me a hint, what the problem could be (and what an
>>>>>>> 'AnnotationVisitor' is)
>>>>>>>
>>>>>>> an AnnotationVisitor
>>>>>>> (org.apache.cxf.common.injection.ResourceInjector@383118) raised an
>>>>>>> exception on element public void
>>>>>>> org.apache.cxf.transport.jms.JMSTransportFactory.setBus(org.apache.cxf.Bus).
>>>>>>> java.lang.NullPointerException
>>>>>>> 	at
>>>>>>> javax.naming.InitialContext.getURLScheme(InitialContext.java:269)
>>>>>>> 	at
>>>>>>> javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:318)
>>>>>>> 	at javax.naming.InitialContext.lookup(InitialContext.java:392)
>>>>>>> 	at
>>>>>>> org.apache.cxf.transport.servlet.ServletContextResourceResolver.resolve(ServletContextResourceResolver.java:62)
>>>>>>> 	at
>>>>>>> org.apache.cxf.resource.DefaultResourceManager.findResource(DefaultResourceManager.java:99)
>>>>>>> 	at
>>>>>>> org.apache.cxf.resource.DefaultResourceManager.resolveResource(DefaultResourceManager.java:55)
>>>>>>> 	at
>>>>>>> org.apache.cxf.common.injection.ResourceInjector.resolveResource(ResourceInjector.java:401)
>>>>>>> 	at
>>>>>>> org.apache.cxf.common.injection.ResourceInjector.visitMethod(ResourceInjector.java:185)
>>>>>>> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>>>> 	at
>>>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>>>>>> 	at
>>>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>>>>>> 	at java.lang.reflect.Method.invoke(Method.java:597)
>>>>>>> 	at
>>>>>>> org.apache.cxf.common.annotation.AnnotationProcessor.visitAnnotatedElement(AnnotationProcessor.java:131)
>>>>>>> 	at
>>>>>>> org.apache.cxf.common.annotation.AnnotationProcessor.processMethods(AnnotationProcessor.java:103)
>>>>>>> 	at
>>>>>>> org.apache.cxf.common.annotation.AnnotationProcessor.accept(AnnotationProcessor.java:90)
>>>>>>> 	at
>>>>>>> org.apache.cxf.common.injection.ResourceInjector.inject(ResourceInjector.java:81)
>>>>>>> 	at
>>>>>>> org.apache.cxf.common.injection.ResourceInjector.inject(ResourceInjector.java:76)
>>>>>>> 	at
>>>>>>> org.apache.cxf.bus.extension.ExtensionManagerImpl.loadAndRegister(ExtensionManagerImpl.java:165)
>>>>>>> 	at
>>>>>>> org.apache.cxf.bus.extension.ExtensionManagerImpl.activateViaNS(ExtensionManagerImpl.java:86)
>>>>>>> 	at
>>>>>>> org.apache.cxf.bus.extension.ExtensionManagerImpl.activateAll(ExtensionManagerImpl.java:94)
>>>>>>> 	at
>>>>>>> org.apache.cxf.bus.extension.DeferredMap.undefer(DeferredMap.java:36)
>>>>>>> 	at
>>>>>>> org.apache.cxf.transport.DestinationFactoryManagerImpl.getDestinationFactoryForUri(DestinationFactoryManagerImpl.java:136)
>>>>>>> 	at
>>>>>>> org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpointInfo(AbstractWSDLBasedEndpointFactory.java:160)
>>>>>>> 	at
>>>>>>> org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:102)
>>>>>>> 	at
>>>>>>> org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:114)
>>>>>>> 	at
>>>>>>> org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:160)
>>>>>>> 	at
>>>>>>> org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:322)
>>>>>>> 	at
>>>>>>> org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:244)
>>>>>>> 	at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:194)
>>>>>>> 	at
>>>>>>> org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:84)
>>>>>>> 	at javax.xml.ws.Endpoint.publish(Endpoint.java:170)
>>>>>>> 	at xoz.JettyServletLauncher.main(JettyServletLauncher.java:55)
>>>>>>>   
>>>>>>>       
>>>>>>>             
>>>>>> ----------------------------
>>>>>> IONA Technologies PLC (registered in Ireland)
>>>>>> Registered Number: 171387
>>>>>> Registered Address: The IONA Building, Shelbourne Road, Dublin 4,
>>>>>> Ireland
>>>>>>
>>>>>>
>>>>>>     
>>>>>>           
>>>>> Quoted from: 
>>>>> http://www.nabble.com/Using-CXF-with-Jetty-Servlet-Transport-tp18136831p18137167.html
>>>>>   
>>>>>         
>>>> ----------------------------
>>>> IONA Technologies PLC (registered in Ireland)
>>>> Registered Number: 171387
>>>> Registered Address: The IONA Building, Shelbourne Road, Dublin 4,
>>>> Ireland
>>>>
>>>>
>>>>       
>>>     
>>
>>   
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Using-CXF-with-Jetty-Servlet-Transport-tp18136831p18253851.html
Sent from the cxf-user mailing list archive at Nabble.com.


Re: Using CXF with Jetty Servlet Transport

Posted by Willem Jiang <wi...@gmail.com>.
If you don't want to use Spring to wire the components in the CXF Bus , 
you can use CXFNoSpringServlet for the servlet transport initiation.  
Otherwise please use the CXFServlet because you can leverage Spring 
configuration file to publish your service endpoints.

BTW, if you are using the CXF module jars, you could just remove the 
cxf-rt-transport-jms* jar from your class path and it will not bother 
you anymore.

Willem

Serethos wrote:
> Hello,
>
> now I have discovered a very interesting Point: 
> According to the Jetty-NoSpring-Servlet-Transport tutorial I used the
> CXFNoSpringServlet. But if I use the normal CXFServlet the protocol http is
> automatically chosen!
> This makes absolutely no sense:
> How can I configure the CXFNoSpringServlet to use http (leaving the relative
> service path for jetty)?
> Why should I choose CXFNoSpringServlet when CXFServlet does the same job?
>
>
>
> Serethos wrote:
>   
>> Hello,
>>
>> first of all: thanks for your effort.
>>
>> Another time I digged through the example from the link you posted. It's
>> quite the same thing
>> I tried before and produces the same result:
>> Not giving the http:// -Protocol-Prefix ends in a misconfiguration of
>> using JMS instead of servlet/http
>> transport. But this is how the example works.
>> Moreover it is very odd that giving a fully qualified URI _without_ port
>> leads to an wsdl. Using
>> a port does not.
>>
>>
>>
>> Ulhas Bhole wrote:
>>     
>>> Hi Serentos,
>>>
>>> I have added users@cxf.apache.org so that others will have chance to 
>>> look at your mail and respond to it.
>>> I don't know much about servlet transport but as far as I remember CXF 
>>> will match the URI prefix (e.g. http:// or jms:// or local://) with the 
>>> URI prefix returned by TransportFactories that are instantiated and will 
>>> choose the transport based on that.
>>>
>>> For servlet transport I would suggest you take a look at system test in 
>>> CXF source here 
>>> http://svn.apache.org/repos/asf/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/servlet/
>>>
>>> Regards,
>>>
>>> Ulhas Bhole
>>>
>>> Serethos@web.de wrote:
>>>       
>>>> At the moment my attempts and results are very confusing.
>>>> So I will try to describe my approach. 
>>>>
>>>> First, the Webservice Interface:
>>>>
>>>> @WebService
>>>> public interface HelloWorld
>>>> {
>>>>     String sayHi(@WebParam(name="text") String text);
>>>> }
>>>>  
>>>> The implementing Service:
>>>>
>>>> @WebService(endpointInterface = "webservices.HelloWorld", serviceName =
>>>> "hello")
>>>> public class HelloWorldImplementation implements HelloWorld
>>>> {
>>>>     @Override
>>>>     public String sayHi(String text)
>>>>     {
>>>>         return "waaaaazzzzuuuuuupp?! you said: " + text;
>>>>     }
>>>> } 
>>>>
>>>> The Servlet which shall control the Transport:
>>>>
>>>> public class HelloWorldServlet extends CXFNonSpringServlet implements
>>>> Servlet
>>>> {
>>>>     @Override
>>>>     public void loadBus(ServletConfig servletConfig) throws
>>>> ServletException
>>>>     {
>>>>         super.loadBus(servletConfig);
>>>>         
>>>>         Bus bus = getBus();
>>>>         BusFactory.setDefaultBus(bus);
>>>>         HelloWorldImplementation service = new
>>>> HelloWorldImplementation();
>>>>         Endpoint.publish("/testService", service);
>>>>     }
>>>> }
>>>>
>>>> An finally the Server with its publishing mechanism:
>>>>
>>>> public class JettyServletLauncher
>>>> {
>>>>     public static void main(String args[])
>>>>     {
>>>> //        String busFactory =
>>>> System.getProperty(BusFactory.BUS_FACTORY_PROPERTY_NAME);
>>>>         System.setProperty(BusFactory.BUS_FACTORY_PROPERTY_NAME,
>>>> "org.apache.cxf.bus.CXFBusFactory");
>>>>         
>>>>         Server server = new Server(8080);    
>>>>         Context root = new Context(server, "/", Context.SESSIONS);
>>>>         HelloWorldServlet nonSpringServlet = new HelloWorldServlet();
>>>>         root.addServlet(new ServletHolder(nonSpringServlet), "/*");
>>>>         
>>>>         try
>>>>         {
>>>>             server.start();
>>>>         }
>>>>         catch (Exception e)
>>>>         {
>>>>             e.printStackTrace();
>>>>         }
>>>>       
>>>>     }
>>>> }
>>>>
>>>> Now to my masses of questions:
>>>>
>>>> 1. If I get it right, CXF detects if a jetty/ webserver instance is
>>>> already bound. In my case, I start
>>>> jetty @ port:8080 with its root as context path. From my experiences I
>>>> am used to bin the soap service
>>>> url as relative path which is added to the jetty's context path. In my
>>>> example /testService, so that the
>>>> services should be bound to http://localhost:8080/testService?wsdl, the
>>>> service itself is mapped to the
>>>> name "hello".
>>>> This raises the exception I mentioned before, where you detected the
>>>> problem of the wrong protocol:
>>>> an AnnotationVisitor
>>>> (org.apache.cxf.common.injection.ResourceInjector@105691e) raised an
>>>> exception on element 
>>>> public void
>>>> org.apache.cxf.transport.jms.JMSTransportFactory.setBus(org.apache.cxf.Bus)
>>>>
>>>> You suggest to control the URIs again which are published through the
>>>> endpoint. But why should I add the
>>>> protocol within the Endpoint.publish method?
>>>> But if I do so, it seems that http-transport is chosen:
>>>>
>>>> Endpoint.publish("http://localhost:8080/testService", service);
>>>>
>>>> This URI seems redundant to me, because the port and the root path is
>>>> already defined by the jetty configuration.
>>>>
>>>> But the problem isn't solved then: accessing localhost:8080 gives me an
>>>> hyperlink:
>>>> {http://webservices/}HelloWorldImplementationPort
>>>> which references:
>>>> http://localhost:8080/testService?wsdl    - resulting in a message "No
>>>> service was found."
>>>>
>>>> I am especially wondering how (name of) the hyperlink is created ..
>>>>
>>>> just tried another thing:
>>>> Endpoint.publish("http://localhost/testService", service); // notice: no
>>>> port
>>>>
>>>> This works (I get a wsdl)! But now an IllegalStateException from the
>>>> servlet is thrown ..
>>>> java.lang.IllegalStateException: STREAM
>>>> 	at org.mortbay.jetty.Response.getWriter(Response.java:585)
>>>>
>>>> 2. As comparison I used the internally started jetty, the main code
>>>> reduces then to this:
>>>>
>>>> CXFNonSpringServlet servlet = new CXFNonSpringServlet();
>>>> BusFactory.setDefaultBus(servlet.getBus());
>>>> HelloWorldImplementation service = new HelloWorldImplementation();
>>>> Endpoint.publish("http://localhost:8080/testService", service);
>>>> JOptionPane.showMessageDialog(null, "Stop Server");
>>>>
>>>> This works pretty good, the URI http://localhost:8080/testService?wsdl
>>>> creates a valid wsdl.
>>>>
>>>> 3. My main problems seems to be the choice of the transport protocol,
>>>> where JMS is used. Is this configuration
>>>> only dependend on the URI I use by the endpoint publishing?
>>>>
>>>> 4. There is one point within the use of the framework, I do not
>>>> understand:
>>>> The Endpoint class is from the JDK. Enpoint.publish() uses the
>>>> Provider-factory to get EndpointImpl for publishing
>>>> the service. Where and at which point is the Endpoint-Implementation of
>>>> CXF injected?
>>>>
>>>> Many thanks in advance for digging through my questions!
>>>>
>>>>
>>>> Ulhas Bhole wrote:
>>>>   
>>>>         
>>>>> Hi Serethos,
>>>>>
>>>>> You are picking up JMS transport and not servlet. Make sure you have 
>>>>> proper URI in your wsdl service and endpoint.publish() call.
>>>>>
>>>>> Regards,
>>>>>
>>>>> Ulhas Bhole
>>>>>
>>>>> Serethos wrote:
>>>>>     
>>>>>           
>>>>>> Hello!
>>>>>>
>>>>>> I need to get the Servlet Transport of CXF and Jetty to work together
>>>>>> but
>>>>>> have several problems with it.
>>>>>> Searching within forums, mailing lists and the inet there is often
>>>>>> mentioned
>>>>>> the complete source the to code snippet example of the user doc
>>>>>> (http://cwiki.apache.org/CXF20DOC/servlet-transport.html).
>>>>>> The problem ist that the links to the cxf repository are always dead
>>>>>> (like
>>>>>> this one:
>>>>>> https://svn.apache.org/repos/asf/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/servlet/NoSpringServletServer.java
>>>>>> )
>>>>>>
>>>>>> Is there any source to get all classes of the example so that I can
>>>>>> test
>>>>>> it
>>>>>> and exclude an error of mine?
>>>>>>
>>>>>>
>>>>>> As addition I want to attach my StackStrace of the error. Perhaps
>>>>>> someone
>>>>>> could give me a hint, what the problem could be (and what an
>>>>>> 'AnnotationVisitor' is)
>>>>>>
>>>>>> an AnnotationVisitor
>>>>>> (org.apache.cxf.common.injection.ResourceInjector@383118) raised an
>>>>>> exception on element public void
>>>>>> org.apache.cxf.transport.jms.JMSTransportFactory.setBus(org.apache.cxf.Bus).
>>>>>> java.lang.NullPointerException
>>>>>> 	at javax.naming.InitialContext.getURLScheme(InitialContext.java:269)
>>>>>> 	at
>>>>>> javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:318)
>>>>>> 	at javax.naming.InitialContext.lookup(InitialContext.java:392)
>>>>>> 	at
>>>>>> org.apache.cxf.transport.servlet.ServletContextResourceResolver.resolve(ServletContextResourceResolver.java:62)
>>>>>> 	at
>>>>>> org.apache.cxf.resource.DefaultResourceManager.findResource(DefaultResourceManager.java:99)
>>>>>> 	at
>>>>>> org.apache.cxf.resource.DefaultResourceManager.resolveResource(DefaultResourceManager.java:55)
>>>>>> 	at
>>>>>> org.apache.cxf.common.injection.ResourceInjector.resolveResource(ResourceInjector.java:401)
>>>>>> 	at
>>>>>> org.apache.cxf.common.injection.ResourceInjector.visitMethod(ResourceInjector.java:185)
>>>>>> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>>> 	at
>>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>>>>> 	at
>>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>>>>> 	at java.lang.reflect.Method.invoke(Method.java:597)
>>>>>> 	at
>>>>>> org.apache.cxf.common.annotation.AnnotationProcessor.visitAnnotatedElement(AnnotationProcessor.java:131)
>>>>>> 	at
>>>>>> org.apache.cxf.common.annotation.AnnotationProcessor.processMethods(AnnotationProcessor.java:103)
>>>>>> 	at
>>>>>> org.apache.cxf.common.annotation.AnnotationProcessor.accept(AnnotationProcessor.java:90)
>>>>>> 	at
>>>>>> org.apache.cxf.common.injection.ResourceInjector.inject(ResourceInjector.java:81)
>>>>>> 	at
>>>>>> org.apache.cxf.common.injection.ResourceInjector.inject(ResourceInjector.java:76)
>>>>>> 	at
>>>>>> org.apache.cxf.bus.extension.ExtensionManagerImpl.loadAndRegister(ExtensionManagerImpl.java:165)
>>>>>> 	at
>>>>>> org.apache.cxf.bus.extension.ExtensionManagerImpl.activateViaNS(ExtensionManagerImpl.java:86)
>>>>>> 	at
>>>>>> org.apache.cxf.bus.extension.ExtensionManagerImpl.activateAll(ExtensionManagerImpl.java:94)
>>>>>> 	at
>>>>>> org.apache.cxf.bus.extension.DeferredMap.undefer(DeferredMap.java:36)
>>>>>> 	at
>>>>>> org.apache.cxf.transport.DestinationFactoryManagerImpl.getDestinationFactoryForUri(DestinationFactoryManagerImpl.java:136)
>>>>>> 	at
>>>>>> org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpointInfo(AbstractWSDLBasedEndpointFactory.java:160)
>>>>>> 	at
>>>>>> org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:102)
>>>>>> 	at
>>>>>> org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:114)
>>>>>> 	at
>>>>>> org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:160)
>>>>>> 	at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:322)
>>>>>> 	at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:244)
>>>>>> 	at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:194)
>>>>>> 	at
>>>>>> org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:84)
>>>>>> 	at javax.xml.ws.Endpoint.publish(Endpoint.java:170)
>>>>>> 	at xoz.JettyServletLauncher.main(JettyServletLauncher.java:55)
>>>>>>   
>>>>>>       
>>>>>>             
>>>>> ----------------------------
>>>>> IONA Technologies PLC (registered in Ireland)
>>>>> Registered Number: 171387
>>>>> Registered Address: The IONA Building, Shelbourne Road, Dublin 4,
>>>>> Ireland
>>>>>
>>>>>
>>>>>     
>>>>>           
>>>> Quoted from: 
>>>> http://www.nabble.com/Using-CXF-with-Jetty-Servlet-Transport-tp18136831p18137167.html
>>>>   
>>>>         
>>> ----------------------------
>>> IONA Technologies PLC (registered in Ireland)
>>> Registered Number: 171387
>>> Registered Address: The IONA Building, Shelbourne Road, Dublin 4, Ireland
>>>
>>>
>>>       
>>     
>
>   


Re: Using CXF with Jetty Servlet Transport

Posted by Serethos <Se...@web.de>.
Hello,

now I have discovered a very interesting Point: 
According to the Jetty-NoSpring-Servlet-Transport tutorial I used the
CXFNoSpringServlet. But if I use the normal CXFServlet the protocol http is
automatically chosen!
This makes absolutely no sense:
How can I configure the CXFNoSpringServlet to use http (leaving the relative
service path for jetty)?
Why should I choose CXFNoSpringServlet when CXFServlet does the same job?



Serethos wrote:
> 
> Hello,
> 
> first of all: thanks for your effort.
> 
> Another time I digged through the example from the link you posted. It's
> quite the same thing
> I tried before and produces the same result:
> Not giving the http:// -Protocol-Prefix ends in a misconfiguration of
> using JMS instead of servlet/http
> transport. But this is how the example works.
> Moreover it is very odd that giving a fully qualified URI _without_ port
> leads to an wsdl. Using
> a port does not.
> 
> 
> 
> Ulhas Bhole wrote:
>> 
>> Hi Serentos,
>> 
>> I have added users@cxf.apache.org so that others will have chance to 
>> look at your mail and respond to it.
>> I don't know much about servlet transport but as far as I remember CXF 
>> will match the URI prefix (e.g. http:// or jms:// or local://) with the 
>> URI prefix returned by TransportFactories that are instantiated and will 
>> choose the transport based on that.
>> 
>> For servlet transport I would suggest you take a look at system test in 
>> CXF source here 
>> http://svn.apache.org/repos/asf/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/servlet/
>> 
>> Regards,
>> 
>> Ulhas Bhole
>> 
>> Serethos@web.de wrote:
>>> At the moment my attempts and results are very confusing.
>>> So I will try to describe my approach. 
>>>
>>> First, the Webservice Interface:
>>>
>>> @WebService
>>> public interface HelloWorld
>>> {
>>>     String sayHi(@WebParam(name="text") String text);
>>> }
>>>  
>>> The implementing Service:
>>>
>>> @WebService(endpointInterface = "webservices.HelloWorld", serviceName =
>>> "hello")
>>> public class HelloWorldImplementation implements HelloWorld
>>> {
>>>     @Override
>>>     public String sayHi(String text)
>>>     {
>>>         return "waaaaazzzzuuuuuupp?! you said: " + text;
>>>     }
>>> } 
>>>
>>> The Servlet which shall control the Transport:
>>>
>>> public class HelloWorldServlet extends CXFNonSpringServlet implements
>>> Servlet
>>> {
>>>     @Override
>>>     public void loadBus(ServletConfig servletConfig) throws
>>> ServletException
>>>     {
>>>         super.loadBus(servletConfig);
>>>         
>>>         Bus bus = getBus();
>>>         BusFactory.setDefaultBus(bus);
>>>         HelloWorldImplementation service = new
>>> HelloWorldImplementation();
>>>         Endpoint.publish("/testService", service);
>>>     }
>>> }
>>>
>>> An finally the Server with its publishing mechanism:
>>>
>>> public class JettyServletLauncher
>>> {
>>>     public static void main(String args[])
>>>     {
>>> //        String busFactory =
>>> System.getProperty(BusFactory.BUS_FACTORY_PROPERTY_NAME);
>>>         System.setProperty(BusFactory.BUS_FACTORY_PROPERTY_NAME,
>>> "org.apache.cxf.bus.CXFBusFactory");
>>>         
>>>         Server server = new Server(8080);    
>>>         Context root = new Context(server, "/", Context.SESSIONS);
>>>         HelloWorldServlet nonSpringServlet = new HelloWorldServlet();
>>>         root.addServlet(new ServletHolder(nonSpringServlet), "/*");
>>>         
>>>         try
>>>         {
>>>             server.start();
>>>         }
>>>         catch (Exception e)
>>>         {
>>>             e.printStackTrace();
>>>         }
>>>       
>>>     }
>>> }
>>>
>>> Now to my masses of questions:
>>>
>>> 1. If I get it right, CXF detects if a jetty/ webserver instance is
>>> already bound. In my case, I start
>>> jetty @ port:8080 with its root as context path. From my experiences I
>>> am used to bin the soap service
>>> url as relative path which is added to the jetty's context path. In my
>>> example /testService, so that the
>>> services should be bound to http://localhost:8080/testService?wsdl, the
>>> service itself is mapped to the
>>> name "hello".
>>> This raises the exception I mentioned before, where you detected the
>>> problem of the wrong protocol:
>>> an AnnotationVisitor
>>> (org.apache.cxf.common.injection.ResourceInjector@105691e) raised an
>>> exception on element 
>>> public void
>>> org.apache.cxf.transport.jms.JMSTransportFactory.setBus(org.apache.cxf.Bus)
>>>
>>> You suggest to control the URIs again which are published through the
>>> endpoint. But why should I add the
>>> protocol within the Endpoint.publish method?
>>> But if I do so, it seems that http-transport is chosen:
>>>
>>> Endpoint.publish("http://localhost:8080/testService", service);
>>>
>>> This URI seems redundant to me, because the port and the root path is
>>> already defined by the jetty configuration.
>>>
>>> But the problem isn't solved then: accessing localhost:8080 gives me an
>>> hyperlink:
>>> {http://webservices/}HelloWorldImplementationPort
>>> which references:
>>> http://localhost:8080/testService?wsdl    - resulting in a message "No
>>> service was found."
>>>
>>> I am especially wondering how (name of) the hyperlink is created ..
>>>
>>> just tried another thing:
>>> Endpoint.publish("http://localhost/testService", service); // notice: no
>>> port
>>>
>>> This works (I get a wsdl)! But now an IllegalStateException from the
>>> servlet is thrown ..
>>> java.lang.IllegalStateException: STREAM
>>> 	at org.mortbay.jetty.Response.getWriter(Response.java:585)
>>>
>>> 2. As comparison I used the internally started jetty, the main code
>>> reduces then to this:
>>>
>>> CXFNonSpringServlet servlet = new CXFNonSpringServlet();
>>> BusFactory.setDefaultBus(servlet.getBus());
>>> HelloWorldImplementation service = new HelloWorldImplementation();
>>> Endpoint.publish("http://localhost:8080/testService", service);
>>> JOptionPane.showMessageDialog(null, "Stop Server");
>>>
>>> This works pretty good, the URI http://localhost:8080/testService?wsdl
>>> creates a valid wsdl.
>>>
>>> 3. My main problems seems to be the choice of the transport protocol,
>>> where JMS is used. Is this configuration
>>> only dependend on the URI I use by the endpoint publishing?
>>>
>>> 4. There is one point within the use of the framework, I do not
>>> understand:
>>> The Endpoint class is from the JDK. Enpoint.publish() uses the
>>> Provider-factory to get EndpointImpl for publishing
>>> the service. Where and at which point is the Endpoint-Implementation of
>>> CXF injected?
>>>
>>> Many thanks in advance for digging through my questions!
>>>
>>>
>>> Ulhas Bhole wrote:
>>>   
>>>> Hi Serethos,
>>>>
>>>> You are picking up JMS transport and not servlet. Make sure you have 
>>>> proper URI in your wsdl service and endpoint.publish() call.
>>>>
>>>> Regards,
>>>>
>>>> Ulhas Bhole
>>>>
>>>> Serethos wrote:
>>>>     
>>>>> Hello!
>>>>>
>>>>> I need to get the Servlet Transport of CXF and Jetty to work together
>>>>> but
>>>>> have several problems with it.
>>>>> Searching within forums, mailing lists and the inet there is often
>>>>> mentioned
>>>>> the complete source the to code snippet example of the user doc
>>>>> (http://cwiki.apache.org/CXF20DOC/servlet-transport.html).
>>>>> The problem ist that the links to the cxf repository are always dead
>>>>> (like
>>>>> this one:
>>>>> https://svn.apache.org/repos/asf/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/servlet/NoSpringServletServer.java
>>>>> )
>>>>>
>>>>> Is there any source to get all classes of the example so that I can
>>>>> test
>>>>> it
>>>>> and exclude an error of mine?
>>>>>
>>>>>
>>>>> As addition I want to attach my StackStrace of the error. Perhaps
>>>>> someone
>>>>> could give me a hint, what the problem could be (and what an
>>>>> 'AnnotationVisitor' is)
>>>>>
>>>>> an AnnotationVisitor
>>>>> (org.apache.cxf.common.injection.ResourceInjector@383118) raised an
>>>>> exception on element public void
>>>>> org.apache.cxf.transport.jms.JMSTransportFactory.setBus(org.apache.cxf.Bus).
>>>>> java.lang.NullPointerException
>>>>> 	at javax.naming.InitialContext.getURLScheme(InitialContext.java:269)
>>>>> 	at
>>>>> javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:318)
>>>>> 	at javax.naming.InitialContext.lookup(InitialContext.java:392)
>>>>> 	at
>>>>> org.apache.cxf.transport.servlet.ServletContextResourceResolver.resolve(ServletContextResourceResolver.java:62)
>>>>> 	at
>>>>> org.apache.cxf.resource.DefaultResourceManager.findResource(DefaultResourceManager.java:99)
>>>>> 	at
>>>>> org.apache.cxf.resource.DefaultResourceManager.resolveResource(DefaultResourceManager.java:55)
>>>>> 	at
>>>>> org.apache.cxf.common.injection.ResourceInjector.resolveResource(ResourceInjector.java:401)
>>>>> 	at
>>>>> org.apache.cxf.common.injection.ResourceInjector.visitMethod(ResourceInjector.java:185)
>>>>> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>> 	at
>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>>>> 	at
>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>>>> 	at java.lang.reflect.Method.invoke(Method.java:597)
>>>>> 	at
>>>>> org.apache.cxf.common.annotation.AnnotationProcessor.visitAnnotatedElement(AnnotationProcessor.java:131)
>>>>> 	at
>>>>> org.apache.cxf.common.annotation.AnnotationProcessor.processMethods(AnnotationProcessor.java:103)
>>>>> 	at
>>>>> org.apache.cxf.common.annotation.AnnotationProcessor.accept(AnnotationProcessor.java:90)
>>>>> 	at
>>>>> org.apache.cxf.common.injection.ResourceInjector.inject(ResourceInjector.java:81)
>>>>> 	at
>>>>> org.apache.cxf.common.injection.ResourceInjector.inject(ResourceInjector.java:76)
>>>>> 	at
>>>>> org.apache.cxf.bus.extension.ExtensionManagerImpl.loadAndRegister(ExtensionManagerImpl.java:165)
>>>>> 	at
>>>>> org.apache.cxf.bus.extension.ExtensionManagerImpl.activateViaNS(ExtensionManagerImpl.java:86)
>>>>> 	at
>>>>> org.apache.cxf.bus.extension.ExtensionManagerImpl.activateAll(ExtensionManagerImpl.java:94)
>>>>> 	at
>>>>> org.apache.cxf.bus.extension.DeferredMap.undefer(DeferredMap.java:36)
>>>>> 	at
>>>>> org.apache.cxf.transport.DestinationFactoryManagerImpl.getDestinationFactoryForUri(DestinationFactoryManagerImpl.java:136)
>>>>> 	at
>>>>> org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpointInfo(AbstractWSDLBasedEndpointFactory.java:160)
>>>>> 	at
>>>>> org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:102)
>>>>> 	at
>>>>> org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:114)
>>>>> 	at
>>>>> org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:160)
>>>>> 	at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:322)
>>>>> 	at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:244)
>>>>> 	at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:194)
>>>>> 	at
>>>>> org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:84)
>>>>> 	at javax.xml.ws.Endpoint.publish(Endpoint.java:170)
>>>>> 	at xoz.JettyServletLauncher.main(JettyServletLauncher.java:55)
>>>>>   
>>>>>       
>>>> ----------------------------
>>>> IONA Technologies PLC (registered in Ireland)
>>>> Registered Number: 171387
>>>> Registered Address: The IONA Building, Shelbourne Road, Dublin 4,
>>>> Ireland
>>>>
>>>>
>>>>     
>>> Quoted from: 
>>> http://www.nabble.com/Using-CXF-with-Jetty-Servlet-Transport-tp18136831p18137167.html
>>>   
>> 
>> 
>> ----------------------------
>> IONA Technologies PLC (registered in Ireland)
>> Registered Number: 171387
>> Registered Address: The IONA Building, Shelbourne Road, Dublin 4, Ireland
>> 
>> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Using-CXF-with-Jetty-Servlet-Transport-tp18136831p18159473.html
Sent from the cxf-user mailing list archive at Nabble.com.


Re: Using CXF with Jetty Servlet Transport

Posted by Serethos <Se...@web.de>.
Hello,

first of all: thanks for your effort.

Another time I digged through the example from the link you posted. It's
quite the same thing
I tried before and produces the same result:
Not giving the http:// -Protocol-Prefix ends in a misconfiguration of using
JMS instead of servlet/http
transport. But this is how the example works.
Moreover it is very odd that giving a fully qualified URI _without_ port
leads to an wsdl. Using
a port does not.



Ulhas Bhole wrote:
> 
> Hi Serentos,
> 
> I have added users@cxf.apache.org so that others will have chance to 
> look at your mail and respond to it.
> I don't know much about servlet transport but as far as I remember CXF 
> will match the URI prefix (e.g. http:// or jms:// or local://) with the 
> URI prefix returned by TransportFactories that are instantiated and will 
> choose the transport based on that.
> 
> For servlet transport I would suggest you take a look at system test in 
> CXF source here 
> http://svn.apache.org/repos/asf/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/servlet/
> 
> Regards,
> 
> Ulhas Bhole
> 
> Serethos@web.de wrote:
>> At the moment my attempts and results are very confusing.
>> So I will try to describe my approach. 
>>
>> First, the Webservice Interface:
>>
>> @WebService
>> public interface HelloWorld
>> {
>>     String sayHi(@WebParam(name="text") String text);
>> }
>>  
>> The implementing Service:
>>
>> @WebService(endpointInterface = "webservices.HelloWorld", serviceName =
>> "hello")
>> public class HelloWorldImplementation implements HelloWorld
>> {
>>     @Override
>>     public String sayHi(String text)
>>     {
>>         return "waaaaazzzzuuuuuupp?! you said: " + text;
>>     }
>> } 
>>
>> The Servlet which shall control the Transport:
>>
>> public class HelloWorldServlet extends CXFNonSpringServlet implements
>> Servlet
>> {
>>     @Override
>>     public void loadBus(ServletConfig servletConfig) throws
>> ServletException
>>     {
>>         super.loadBus(servletConfig);
>>         
>>         Bus bus = getBus();
>>         BusFactory.setDefaultBus(bus);
>>         HelloWorldImplementation service = new
>> HelloWorldImplementation();
>>         Endpoint.publish("/testService", service);
>>     }
>> }
>>
>> An finally the Server with its publishing mechanism:
>>
>> public class JettyServletLauncher
>> {
>>     public static void main(String args[])
>>     {
>> //        String busFactory =
>> System.getProperty(BusFactory.BUS_FACTORY_PROPERTY_NAME);
>>         System.setProperty(BusFactory.BUS_FACTORY_PROPERTY_NAME,
>> "org.apache.cxf.bus.CXFBusFactory");
>>         
>>         Server server = new Server(8080);    
>>         Context root = new Context(server, "/", Context.SESSIONS);
>>         HelloWorldServlet nonSpringServlet = new HelloWorldServlet();
>>         root.addServlet(new ServletHolder(nonSpringServlet), "/*");
>>         
>>         try
>>         {
>>             server.start();
>>         }
>>         catch (Exception e)
>>         {
>>             e.printStackTrace();
>>         }
>>       
>>     }
>> }
>>
>> Now to my masses of questions:
>>
>> 1. If I get it right, CXF detects if a jetty/ webserver instance is
>> already bound. In my case, I start
>> jetty @ port:8080 with its root as context path. From my experiences I am
>> used to bin the soap service
>> url as relative path which is added to the jetty's context path. In my
>> example /testService, so that the
>> services should be bound to http://localhost:8080/testService?wsdl, the
>> service itself is mapped to the
>> name "hello".
>> This raises the exception I mentioned before, where you detected the
>> problem of the wrong protocol:
>> an AnnotationVisitor
>> (org.apache.cxf.common.injection.ResourceInjector@105691e) raised an
>> exception on element 
>> public void
>> org.apache.cxf.transport.jms.JMSTransportFactory.setBus(org.apache.cxf.Bus)
>>
>> You suggest to control the URIs again which are published through the
>> endpoint. But why should I add the
>> protocol within the Endpoint.publish method?
>> But if I do so, it seems that http-transport is chosen:
>>
>> Endpoint.publish("http://localhost:8080/testService", service);
>>
>> This URI seems redundant to me, because the port and the root path is
>> already defined by the jetty configuration.
>>
>> But the problem isn't solved then: accessing localhost:8080 gives me an
>> hyperlink:
>> {http://webservices/}HelloWorldImplementationPort
>> which references:
>> http://localhost:8080/testService?wsdl    - resulting in a message "No
>> service was found."
>>
>> I am especially wondering how (name of) the hyperlink is created ..
>>
>> just tried another thing:
>> Endpoint.publish("http://localhost/testService", service); // notice: no
>> port
>>
>> This works (I get a wsdl)! But now an IllegalStateException from the
>> servlet is thrown ..
>> java.lang.IllegalStateException: STREAM
>> 	at org.mortbay.jetty.Response.getWriter(Response.java:585)
>>
>> 2. As comparison I used the internally started jetty, the main code
>> reduces then to this:
>>
>> CXFNonSpringServlet servlet = new CXFNonSpringServlet();
>> BusFactory.setDefaultBus(servlet.getBus());
>> HelloWorldImplementation service = new HelloWorldImplementation();
>> Endpoint.publish("http://localhost:8080/testService", service);
>> JOptionPane.showMessageDialog(null, "Stop Server");
>>
>> This works pretty good, the URI http://localhost:8080/testService?wsdl
>> creates a valid wsdl.
>>
>> 3. My main problems seems to be the choice of the transport protocol,
>> where JMS is used. Is this configuration
>> only dependend on the URI I use by the endpoint publishing?
>>
>> 4. There is one point within the use of the framework, I do not
>> understand:
>> The Endpoint class is from the JDK. Enpoint.publish() uses the
>> Provider-factory to get EndpointImpl for publishing
>> the service. Where and at which point is the Endpoint-Implementation of
>> CXF injected?
>>
>> Many thanks in advance for digging through my questions!
>>
>>
>> Ulhas Bhole wrote:
>>   
>>> Hi Serethos,
>>>
>>> You are picking up JMS transport and not servlet. Make sure you have 
>>> proper URI in your wsdl service and endpoint.publish() call.
>>>
>>> Regards,
>>>
>>> Ulhas Bhole
>>>
>>> Serethos wrote:
>>>     
>>>> Hello!
>>>>
>>>> I need to get the Servlet Transport of CXF and Jetty to work together
>>>> but
>>>> have several problems with it.
>>>> Searching within forums, mailing lists and the inet there is often
>>>> mentioned
>>>> the complete source the to code snippet example of the user doc
>>>> (http://cwiki.apache.org/CXF20DOC/servlet-transport.html).
>>>> The problem ist that the links to the cxf repository are always dead
>>>> (like
>>>> this one:
>>>> https://svn.apache.org/repos/asf/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/servlet/NoSpringServletServer.java
>>>> )
>>>>
>>>> Is there any source to get all classes of the example so that I can
>>>> test
>>>> it
>>>> and exclude an error of mine?
>>>>
>>>>
>>>> As addition I want to attach my StackStrace of the error. Perhaps
>>>> someone
>>>> could give me a hint, what the problem could be (and what an
>>>> 'AnnotationVisitor' is)
>>>>
>>>> an AnnotationVisitor
>>>> (org.apache.cxf.common.injection.ResourceInjector@383118) raised an
>>>> exception on element public void
>>>> org.apache.cxf.transport.jms.JMSTransportFactory.setBus(org.apache.cxf.Bus).
>>>> java.lang.NullPointerException
>>>> 	at javax.naming.InitialContext.getURLScheme(InitialContext.java:269)
>>>> 	at
>>>> javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:318)
>>>> 	at javax.naming.InitialContext.lookup(InitialContext.java:392)
>>>> 	at
>>>> org.apache.cxf.transport.servlet.ServletContextResourceResolver.resolve(ServletContextResourceResolver.java:62)
>>>> 	at
>>>> org.apache.cxf.resource.DefaultResourceManager.findResource(DefaultResourceManager.java:99)
>>>> 	at
>>>> org.apache.cxf.resource.DefaultResourceManager.resolveResource(DefaultResourceManager.java:55)
>>>> 	at
>>>> org.apache.cxf.common.injection.ResourceInjector.resolveResource(ResourceInjector.java:401)
>>>> 	at
>>>> org.apache.cxf.common.injection.ResourceInjector.visitMethod(ResourceInjector.java:185)
>>>> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>> 	at
>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>>> 	at
>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>>> 	at java.lang.reflect.Method.invoke(Method.java:597)
>>>> 	at
>>>> org.apache.cxf.common.annotation.AnnotationProcessor.visitAnnotatedElement(AnnotationProcessor.java:131)
>>>> 	at
>>>> org.apache.cxf.common.annotation.AnnotationProcessor.processMethods(AnnotationProcessor.java:103)
>>>> 	at
>>>> org.apache.cxf.common.annotation.AnnotationProcessor.accept(AnnotationProcessor.java:90)
>>>> 	at
>>>> org.apache.cxf.common.injection.ResourceInjector.inject(ResourceInjector.java:81)
>>>> 	at
>>>> org.apache.cxf.common.injection.ResourceInjector.inject(ResourceInjector.java:76)
>>>> 	at
>>>> org.apache.cxf.bus.extension.ExtensionManagerImpl.loadAndRegister(ExtensionManagerImpl.java:165)
>>>> 	at
>>>> org.apache.cxf.bus.extension.ExtensionManagerImpl.activateViaNS(ExtensionManagerImpl.java:86)
>>>> 	at
>>>> org.apache.cxf.bus.extension.ExtensionManagerImpl.activateAll(ExtensionManagerImpl.java:94)
>>>> 	at
>>>> org.apache.cxf.bus.extension.DeferredMap.undefer(DeferredMap.java:36)
>>>> 	at
>>>> org.apache.cxf.transport.DestinationFactoryManagerImpl.getDestinationFactoryForUri(DestinationFactoryManagerImpl.java:136)
>>>> 	at
>>>> org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpointInfo(AbstractWSDLBasedEndpointFactory.java:160)
>>>> 	at
>>>> org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:102)
>>>> 	at
>>>> org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:114)
>>>> 	at
>>>> org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:160)
>>>> 	at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:322)
>>>> 	at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:244)
>>>> 	at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:194)
>>>> 	at
>>>> org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:84)
>>>> 	at javax.xml.ws.Endpoint.publish(Endpoint.java:170)
>>>> 	at xoz.JettyServletLauncher.main(JettyServletLauncher.java:55)
>>>>   
>>>>       
>>> ----------------------------
>>> IONA Technologies PLC (registered in Ireland)
>>> Registered Number: 171387
>>> Registered Address: The IONA Building, Shelbourne Road, Dublin 4,
>>> Ireland
>>>
>>>
>>>     
>> Quoted from: 
>> http://www.nabble.com/Using-CXF-with-Jetty-Servlet-Transport-tp18136831p18137167.html
>>   
> 
> 
> ----------------------------
> IONA Technologies PLC (registered in Ireland)
> Registered Number: 171387
> Registered Address: The IONA Building, Shelbourne Road, Dublin 4, Ireland
> 
> 

-- 
View this message in context: http://www.nabble.com/Using-CXF-with-Jetty-Servlet-Transport-tp18136831p18158022.html
Sent from the cxf-user mailing list archive at Nabble.com.