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-tp18136831p18158022.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to