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.
