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 [email protected] 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
>> 
>> [EMAIL PROTECTED] 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
>>> ([EMAIL PROTECTED]) 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
>>>>> ([EMAIL PROTECTED]) 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.

Reply via email to