So! I have now created a relatively restrictive proof of concept. https://github.com/mnybon/cxf-osgi-activator
The project looks for service registrations with jax-rs annotations on their services. When it finds one it builds a server for it and registers it in CXF. There is not much doc yet but there is a simple integration test and test resources which works well as a sample. Basically, what is possible right now is the following: Registering classes as services by registering them as an OSGi service. Registering services at runtime. Registering several resource classes with different paths on the same server. Registering classes with several jax-rs interfaces as several services at once. Registering services on userdefined paths, using annotations or service properties. Unregistering services at runtime. Setting TLSServerParameters on specific ports, allowing for on-the-fly SSL configuration of any unused port. A kind of important caveat: I don't have all that much experience with the deeper levels of CXF, and as such, I assume that there are several things that could have been done a lot smarter. The obvious one is that if you register a new service on a running endpoint (for example http://localhost:3456/services) then the entire http://localhost:3456/services will be taken down momentarily while the server is rebuilt. I haven't tested any advanced features of CXF yet, as I said, it is a proof of concept and work in progress. But take a look and tell me what you think. I can think of more than a few places where I could use this and i hope i'm not alone. -Martin On Wed, Jun 7, 2017 at 5:40 PM, Martin Nielsen <[email protected]> wrote: > I would be very interested to see that if you feel up to it. And yes if i > get something even remotely functional i will post back here. > > On 7 Jun 2017 09:42, "Randy Leonard" <[email protected]> wrote: > >> Martini: >> >> I am using Apache CXF SOAP services with OSGI enRoute, with multiple CXF >> buses. My work on this pre-dates DOSGI and works just fine. >> >> If you wish, I can put some sample code together for you… you can convert >> to REST and post to the group? Let me know. >> >> Randy >> >> >> > On Jun 6, 2017, at 7:17 AM, Martin Nielsen <[email protected]> wrote: >> > >> > I forgot to add that considering the blueprint/spring configuration, >> what i >> > really need is for someone to point me towards the xml parsing that >> takes >> > the serviceBeans and registers them through cxf to Jetty. >> > >> > <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" >> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >> > xmlns:jaxrs="http://cxf.apache.org/blueprint/jaxrs" >> > xmlns:cxf="http://cxf.apache.org/blueprint/core" >> > xsi:schemaLocation=" >> > http://www.osgi.org/xmlns/blueprint/v1.0.0 >> > http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd >> > http://cxf.apache.org/blueprint/jaxrs >> > http://cxf.apache.org/schemas/blueprint/jaxrs.xsd >> > http://cxf.apache.org/blueprint/core >> > http://cxf.apache.org/schemas/blueprint/core.xsd >> > "> >> > >> > <cxf:bus> >> > <cxf:features> >> > <cxf:logging/> >> > </cxf:features> >> > </cxf:bus> >> > >> > <jaxrs:server id="customerService" address="/customers"> >> > <jaxrs:serviceBeans> >> > <ref component-id="serviceBean" /> >> > </jaxrs:serviceBeans> >> > </jaxrs:server> >> > >> > <bean id="serviceBean" class="service.CustomerService"/> >> > </blueprint> >> > >> > On Tue, Jun 6, 2017 at 12:03 PM, Martin Nielsen <[email protected]> >> wrote: >> > >> >> Hello >> >> >> >> I am looking into creating a service-discovery method to register rest >> >> endpoints in cxf running in OSGi, as an alternative to >> >> org.apache.cxf.transport.http_jetty.osgi.HTTPJettyTransportActivator. >> >> >> >> I realize dosgi-cxf exists, but it doesn't quite cover my use case. >> >> >> >> But to be honest I could really use some help understanding the >> different >> >> components at play here. >> >> >> >> Can someone give me an overview over the responsibilities of the >> different >> >> components at play, mainly the JettyHTTPServerEngineFactory and >> >> JettyHTTPServerEngine. >> >> Anything insigt you can give me into the workings and possibly caveats >> >> with these clases would be helpful, but I also have a couple of >> concrete >> >> questions: >> >> >> >> In the documentation on this page https://cwiki.apache.org/ >> >> confluence/display/CXF20DOC/Standalone+HTTP+Transport it seems that >> the >> >> TLSParameters can be registered for each "Endpoint". Is that the >> >> JettyHTTPServerEngine engine in the code? >> >> >> >> Is it possible to set new TLSParameters while the >> >> endpoint/engine/whichever after services are registered to it? >> >> >> >> How does the HTTPJettyTransportActivator clean up when it shuts down? I >> >> don't see any cleanup in the code. Does it just garbage-collect the >> >> endpoints if the bundle stops? >> >> >> >> Can you point me to the classes that takes care of registering services >> >> through blueprints? I have never really dabbled in blueprints and I am >> >> having a hard time getting my head around it. >> >> >> >> Thank you >> >> -Martin >> >> >> >>
