This is definitely a bug. I made some changes to hopefully fix this on thursday. I'm going to deploy a new 2.1.2-SNAPSHOT shortly. If you could give that a spin in the next few days, that would be great.

Dan


On Jul 3, 2008, at 5:25 AM, Serethos wrote:


Hello!

I need to dynamically bind and unbind service Endpoints with HTTP- Servlet
Transport. To test it I used this snippet:

<pre>
           Server server = new Server(8080);
           Context root = new Context(server, "/", Context.SESSIONS);
           CXFServlet servlet = new CXFServlet();
           BusFactory.setDefaultBus(servlet.getBus());
           HelloWorldImplementation service = new
HelloWorldImplementation();
           root.addServlet(new ServletHolder(servlet), "/*");

           server.start();
Endpoint endpoint = Endpoint.publish("/testService", service);
           Thread.sleep(5000);

           endpoint.stop();
           Thread.sleep(5000);

           endpoint = Endpoint.publish("/testService", service);
</pre>

This only publishes a service, waits a few seconds, stops it, waits and
publishes a new Endpoint again.

This runs as supposed, but I noticed some strange effects modifying the
servlet context path. E.g. I use

<pre>
            root.addServlet(new ServletHolder(servlet), "/soap/*");
</pre>

When I start the program and I access the service wsdl under
http://localhost/soap/testService?wsdl after the first publish it works. A second call to the wsdl after the service endpoint was stopped, created
newly and published leads to:

INFO: Interceptor has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: No such operation:

So instead of the wsdl a NoSuchOperationFault is shown.

Now the very odd part:

The same procedure but this time I do _not_ call the wsdl within the first publishing intervall. So the endpoint is published, stopped, gets created
newly, published and then I access the wsdl: it works!

Trying some time around I discovered a workaround by adding a new
ServletHolder with the old servlet to the context root before publishing the
new Endpoint again:

              root.addServlet(new ServletHolder(servlet), "/soap/*");
              endpoint = Endpoint.publish("/testService", service);

Now the wsdl is accessible the second time _with_ the new context path
/soap/.

1. Can anyone explain me this behavior, especially, if it is a bug or wrong
usage?
2. Is this the correct way to start and stop/republish new Endpoint or do I
have to fear old resources which do not get cleaned up?




--
View this message in context: 
http://www.nabble.com/Republishing-a-service%3A-odd-behavior-tp18255362p18255362.html
Sent from the cxf-user mailing list archive at Nabble.com.


---
Daniel Kulp
[EMAIL PROTECTED]
http://www.dankulp.com/blog




Reply via email to