No, no. I also use javax.xml.ws.Endpoint. But as CXF is extending the
javax.xml.ws.spi.Provider class in org.apache.cxf.jaxws.spi.ProviderImpl
calling Endpoint.publish() results in a call of
org.apache.cxf.jaxws.EndpointImpl.doPublish().
On 07.01.2013, at 15:20, Martin Fernau wrote:
> Hm - for me it's not "org.apache.cxf.jaxws.EndpointImpl". I use
> "javax.xml.ws.Endpoint" in my loadBus Method. Maybe this is your problem.
>
> HTH
> Martin
>
> Am 07.01.2013 13:44, schrieb Daniel Bimschas:
>> I keep running into the same problem.
>> org.apache.cxf.jaxws.EndpointImpl.doPublish(...) still tries to start a new
>> Jetty instance. Also I can't find any setter or similar functionality to
>> pass an existing instance to EndpointImpl...
>>
>> On 07.01.2013, at 13:31, Daniel Bimschas wrote:
>>
>>> Forget the question! Got it now that this is just your use/test case having
>>> this DefaultHTTPServerEngine ;-) I'll try with the snippet...
>>>
>>> On 07.01.2013, at 13:16, Daniel Bimschas wrote:
>>>
>>>> Martin,
>>>>
>>>> that looks like exactly what I'm looking for! Unfortunately there seems to
>>>> be no class called DefaultHTTPServerEngine. Is this code snippet up to
>>>> date with the current release (I'm using 2.7.1)?
>>>>
>>>> Cheers,
>>>> Daniel
>>>>
>>>> On 07.01.2013, at 13:05, Martin Fernau wrote:
>>>>
>>>>> Hi Daniel,
>>>>>
>>>>> programmatically adding a WS-Endpoint was a bit more tricky. For this to
>>>>> work I did the follwoing:
>>>>> I write a CXFServlet-Class extending from CXFNonSpringServlet like this:
>>>>>
>>>>> --- cut
>>>>> public class CXFServlet extends CXFNonSpringServlet {
>>>>> private Logger logger = Logger.getLogger(CXFServlet.class);
>>>>> private DefaultHTTPServerEngine httpServerEngine;
>>>>>
>>>>> public CXFServlet(DefaultHTTPServerEngine httpServerEngine) {
>>>>> super();
>>>>> this.httpServerEngine = httpServerEngine;
>>>>> }
>>>>>
>>>>> @Override
>>>>> public void loadBus(ServletConfig servletConfig) {
>>>>> super.loadBus(servletConfig);
>>>>> logger.info("Loading CXF servlet...");
>>>>> BusFactory.setDefaultBus(this.getBus());
>>>>>
>>>>> Set<String> endpoints =
>>>>> httpServerEngine.getJaxServices().keySet();
>>>>> for (String endpoint : endpoints) {
>>>>> Endpoint.publish(endpoint,
>>>>> httpServerEngine.getJaxServices().get(endpoint));
>>>>> }
>>>>> }
>>>>> }
>>>>> --- cut
>>>>>
>>>>> This CXFServlet I add like this:
>>>>>
>>>>> --- cut
>>>>> CXFServlet servlet = new CXFServlet(httpServerEngine), "/services/*";
>>>>> ServletHolder sh = new ServletHolder(servlet);
>>>>> servletContext.getServletHandler().addServletWithMapping(sh,
>>>>> servletPath);
>>>>> --- cut
>>>>>
>>>>> The "loadBus" method from my CXFServlet gets called automatically from
>>>>> CXF somewhen. Within this method I just use the reference to my
>>>>> DefaultHTTPServerEngine Object to obtain a list of my WS-Objects I want
>>>>> to add to my system. Theoretically you just add all WS-Objects in this
>>>>> method like this:
>>>>>
>>>>> --- cut
>>>>> Endpoint.publish("myService", objectOfClassImplementingWSInterface);
>>>>> --- cut
>>>>>
>>>>> You need to know that the endpoint "myService" is relative to the path I
>>>>> used to add my CXFServlet in jetty. As I used "/services/*" for this
>>>>> path in Jetty, the real path for Endpoint.publish("myService", ...)" is
>>>>> "/services/myService".
>>>>>
>>>>> HTH
>>>>> Martin
>>>>>
>>>>>
>>>>> Am 07.01.2013 11:31, schrieb Daniel Bimschas:
>>>>>> Hi Martin,
>>>>>>
>>>>>> thank you for this answer. I actually already did this myself and it
>>>>>> works fine for adding a normal servlet. But when I add an JAX-RS
>>>>>> application using JAXRSServerFactoryBean (or a JAX-WS endpoint using
>>>>>> Endpoint.publish(...)) it tries to start another Jetty instance on the
>>>>>> same port :-(.
>>>>>>
>>>>>> It is pretty obvious to me that a "ServerFactory" creates a new Jetty
>>>>>> instance. However, I did not find another way yet to programmatically
>>>>>> add a JAX-WS/JAX-RS service instance to the root context.
>>>>>>
>>>>>> https://gist.github.com/4473947 shows how I construct my server instance.
>>>>>>
>>>>>> So, to me it seems that I have to let the CXF framework know of the
>>>>>> existence of the Jetty instance. Does somebody have an idea?
>>>>>>
>>>>>> Best,
>>>>>> Daniel
>>>>>>
>>>>>> On 05.01.2013, at 19:02, Martin Fernau wrote:
>>>>>>
>>>>>>> Not sure if there is a way to do this with CXF - but I do it with jetty
>>>>>>> itself:
>>>>>>>
>>>>>>> servletContext = new
>>>>>>> ServletContextHandler(ServletContextHandler.SESSIONS);
>>>>>>> servletContext.setContextPath("/");
>>>>>>> ContextHandlerCollection contexts = new ContextHandlerCollection();
>>>>>>> contexts.setHandlers(new Handler[] { securityHandler, servletContext,
>>>>>>> webAppContext });
>>>>>>> // Regiser on server
>>>>>>> server.setHandler(contexts);
>>>>>>> // For each servlet you want to add do this
>>>>>>> ServletHolder sh = new ServletHolder(servlet);
>>>>>>> String servletPath = "/some/where";
>>>>>>> servletContext.getServletHandler().addServletWithMapping(sh,
>>>>>>> servletPath);
>>>>>>>
>>>>>>> Regards
>>>>>>> Martin
>>>>>>>
>>>>>>>
>>>>>>> Am 05.01.2013 17:47, schrieb Daniel Bimschas:
>>>>>>>> Hi list,
>>>>>>>>
>>>>>>>> Is there a way with CXF to programmatically add a good old HttpServlet
>>>>>>>> instance to an already running instance of the embedded Jetty
>>>>>>>> container?
>>>>>>>>
>>>>>>>> This way I would be able to add a WebSocketServlet to Jetty...
>>>>>>>>
>>>>>>>> Best regards,
>>>>>>>> Daniel
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> FERNAUSOFT GmbH
>>>>>>> Gartenstraße 42 - 37269 Eschwege
>>>>>>>
>>>>>>> Telefon (0 56 51) 95 99-0
>>>>>>> Telefax (0 56 51) 95 99-90
>>>>>>>
>>>>>>> eMail [email protected]
>>>>>>> Internet http://www.fernausoft.de
>>>>>>>
>>>>>>> Handelsregister Eschwege, HRB 1585
>>>>>>> Geschäftsführer: Axel Fernau, Ulrich Fernau, Martin Fernau
>>>>>>> Steuernummer 025 233 00041
>>>>>>> USt-ID-Nr. DE 178 554 522
>>>>>>>
>>>>>>> Diese E-Mail und alle beigefügten Dateien sind vertraulich und nur für
>>>>>>> den Adressaten bestimmt.
>>>>>>> Wenn Sie nicht der richtige Adressat sind, leiten Sie diese E-Mail
>>>>>>> bitte nicht weiter, öffnen Sie etwaige Anhänge nicht, machen Sie keine
>>>>>>> Kopien und speichern Sie diese E-Mail nicht. Informieren Sie uns bitte,
>>>>>>> indem Sie uns eine Antwort-Mail senden oder uns telefonisch unter +49
>>>>>>> (0)5651 9599-0 verständigen. Löschen Sie bitte anschließend die
>>>>>>> erhaltene E-Mail aus Ihrem System.
>>>>>>> Vielen Dank!
>>>>>>>
>>>>>>> This email is only intended for the addressee. The content of this
>>>>>>> email, including all attachments is confidential and includes
>>>>>>> privileged material.
>>>>>>> If you are not the intended recipient, please do not forward or
>>>>>>> disclose this email, do not open any attachments or make copies or save
>>>>>>> this email anywhere. Please inform us about the error by returning this
>>>>>>> email or by calling us on our phone +49 (0)5651 9599-0. Please then
>>>>>>> finally delete this email from your system.
>>>>>>> Thank you very much.
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> FERNAUSOFT GmbH
>>>>> Gartenstraße 42 - 37269 Eschwege
>>>>>
>>>>> Telefon (0 56 51) 95 99-0
>>>>> Telefax (0 56 51) 95 99-90
>>>>>
>>>>> eMail [email protected]
>>>>> Internet http://www.fernausoft.de
>>>>>
>>>>> Handelsregister Eschwege, HRB 1585
>>>>> Geschäftsführer: Axel Fernau, Ulrich Fernau, Martin Fernau
>>>>> Steuernummer 025 233 00041
>>>>> USt-ID-Nr. DE 178 554 622
>>>>>
>>>>> Diese E-Mail und alle beigefügten Dateien sind vertraulich und nur für
>>>>> den Adressaten bestimmt.
>>>>> Wenn Sie nicht der richtige Adressat sind, leiten Sie diese E-Mail bitte
>>>>> nicht weiter, öffnen Sie etwaige Anhänge nicht, machen Sie keine Kopien
>>>>> und speichern Sie diese E-Mail nicht. Informieren Sie uns bitte, indem
>>>>> Sie uns eine Antwort-Mail senden oder uns telefonisch unter +49 (0)5651
>>>>> 9599-0 verständigen. Löschen Sie bitte anschließend die erhaltene E-Mail
>>>>> aus Ihrem System.
>>>>> Vielen Dank!
>>>>>
>>>>> This email is only intended for the addressee. The content of this
>>>>> email, including all attachments is confidential and includes privileged
>>>>> material.
>>>>> If you are not the intended recipient, please do not forward or disclose
>>>>> this email, do not open any attachments or make copies or save this
>>>>> email anywhere. Please inform us about the error by returning this email
>>>>> or by calling us on our phone +49 (0)5651 9599-0. Please then finally
>>>>> delete this email from your system.
>>>>> Thank you very much.
>>>>>
>>>>>
>>>>
>>>
>>
>
>
> --
> FERNAUSOFT GmbH
> Gartenstraße 42 - 37269 Eschwege
>
> Telefon (0 56 51) 95 99-0
> Telefax (0 56 51) 95 99-90
>
> eMail [email protected]
> Internet http://www.fernausoft.de
>
> Handelsregister Eschwege, HRB 1585
> Geschäftsführer: Axel Fernau, Ulrich Fernau, Martin Fernau
> Steuernummer 025 233 00041
> USt-ID-Nr. DE 178 554 622
>
> Diese E-Mail und alle beigefügten Dateien sind vertraulich und nur für
> den Adressaten bestimmt.
> Wenn Sie nicht der richtige Adressat sind, leiten Sie diese E-Mail bitte
> nicht weiter, öffnen Sie etwaige Anhänge nicht, machen Sie keine Kopien
> und speichern Sie diese E-Mail nicht. Informieren Sie uns bitte, indem
> Sie uns eine Antwort-Mail senden oder uns telefonisch unter +49 (0)5651
> 9599-0 verständigen. Löschen Sie bitte anschließend die erhaltene E-Mail
> aus Ihrem System.
> Vielen Dank!
>
> This email is only intended for the addressee. The content of this
> email, including all attachments is confidential and includes privileged
> material.
> If you are not the intended recipient, please do not forward or disclose
> this email, do not open any attachments or make copies or save this
> email anywhere. Please inform us about the error by returning this email
> or by calling us on our phone +49 (0)5651 9599-0. Please then finally
> delete this email from your system.
> Thank you very much.
>
>