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 [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




Reply via email to