Discussion:
multiple CXFNonSpringJaxrsServlets
Scott Lewis
2018-10-20 21:31:55 UTC
Permalink
Hi,

Using OSGi HttpService, if I register more than one instance of
CXFNonSpringJaxrsServlet...i.e. at different aliases...then I get an
exception.  For example if I have two aliases

'/foo' -> instance 1 of CXFNonSpringJaxrsServlet

'/bar' -> instance 2 of CXFNonSpringJaxrsServlet

on the second call to httpService.registerServlet I get exception and
stack trace below.

Is there a way to create/configure/register multiple
CXFNonSpringJaxrsServlet instances...and/or the underlying
JAXRSServerFactoryBean so that they don't conflict in this manner?  Or
is there some other cxf jaxrs servlet/bean classes that would allow this?

Thanksinadvance,

Scott

org.apache.cxf.service.factory.ServiceConstructionException
    at
org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:219)
    at
org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet.createServerFromApplication(CXFNonSpringJaxrsServlet.java:546)
    at
org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet.init(CXFNonSpringJaxrsServlet.java:115)
    at
org.eclipse.equinox.http.servlet.internal.HttpServiceRuntimeImpl$LegacyServlet.init(HttpServiceRuntimeImpl.java:1206)
    at
org.eclipse.equinox.http.servlet.internal.registration.EndpointRegistration.init(EndpointRegistration.java:94)
    at
org.eclipse.equinox.http.servlet.internal.context.ContextController.doAddServletRegistration(ContextController.java:596)
    at
org.eclipse.equinox.http.servlet.internal.context.ContextController.addServletRegistration(ContextController.java:450)
    at
org.eclipse.equinox.http.servlet.internal.customizer.ContextServletTrackerCustomizer.addingService(ContextServletTrackerCustomizer.java:55)
    at
org.eclipse.equinox.http.servlet.internal.customizer.ContextServletTrackerCustomizer.addingService(ContextServletTrackerCustomizer.java:1)
    at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)
    at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
    at
org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
    at
org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
    at
org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:901)
    at
org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:109)
    at
org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:920)
    at
org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
    at
org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
    at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:862)
    at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:801)
    at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:127)
    at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:225)
    at
org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:469)
    at
org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:487)
    at
org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:1004)
    at
org.eclipse.equinox.http.servlet.internal.HttpServiceRuntimeImpl.registerHttpServiceServlet(HttpServiceRuntimeImpl.java:722)
    at
org.eclipse.equinox.http.servlet.internal.HttpServiceImpl$3.run(HttpServiceImpl.java:148)
    at
org.eclipse.equinox.http.servlet.internal.HttpServiceImpl$3.run(HttpServiceImpl.java:1)
    at java.security.AccessController.doPrivileged(Native Method)
    at
org.eclipse.equinox.http.servlet.internal.HttpServiceImpl.registerServlet(HttpServiceImpl.java:145)
<stack deleted>
Caused by: org.apache.cxf.service.factory.ServiceConstructionException:
There is an endpoint already running on /.
    at
org.apache.cxf.jaxrs.JAXRSBindingFactory.addListener(JAXRSBindingFactory.java:86)
    at org.apache.cxf.endpoint.ServerImpl.start(ServerImpl.java:123)
    at
org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:206)
    ... 84 more
David Karlsen
2018-10-21 09:38:13 UTC
Permalink
If you have separate CxfBus'es per servlet it should work AFAIK.
Post by Scott Lewis
Hi,
Using OSGi HttpService, if I register more than one instance of
CXFNonSpringJaxrsServlet...i.e. at different aliases...then I get an
exception. For example if I have two aliases
'/foo' -> instance 1 of CXFNonSpringJaxrsServlet
'/bar' -> instance 2 of CXFNonSpringJaxrsServlet
on the second call to httpService.registerServlet I get exception and
stack trace below.
Is there a way to create/configure/register multiple
CXFNonSpringJaxrsServlet instances...and/or the underlying
JAXRSServerFactoryBean so that they don't conflict in this manner? Or
is there some other cxf jaxrs servlet/bean classes that would allow this?
Thanksinadvance,
Scott
org.apache.cxf.service.factory.ServiceConstructionException
at
org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:219)
at
org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet.createServerFromApplication(CXFNonSpringJaxrsServlet.java:546)
at
org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet.init(CXFNonSpringJaxrsServlet.java:115)
at
org.eclipse.equinox.http.servlet.internal.HttpServiceRuntimeImpl$LegacyServlet.init(HttpServiceRuntimeImpl.java:1206)
at
org.eclipse.equinox.http.servlet.internal.registration.EndpointRegistration.init(EndpointRegistration.java:94)
at
org.eclipse.equinox.http.servlet.internal.context.ContextController.doAddServletRegistration(ContextController.java:596)
at
org.eclipse.equinox.http.servlet.internal.context.ContextController.addServletRegistration(ContextController.java:450)
at
org.eclipse.equinox.http.servlet.internal.customizer.ContextServletTrackerCustomizer.addingService(ContextServletTrackerCustomizer.java:55)
at
org.eclipse.equinox.http.servlet.internal.customizer.ContextServletTrackerCustomizer.addingService(ContextServletTrackerCustomizer.java:1)
at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)
at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
at
org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
at
org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
at
org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:901)
at
org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:109)
at
org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:920)
at
org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
at
org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:862)
at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:801)
at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:127)
at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:225)
at
org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:469)
at
org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:487)
at
org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:1004)
at
org.eclipse.equinox.http.servlet.internal.HttpServiceRuntimeImpl.registerHttpServiceServlet(HttpServiceRuntimeImpl.java:722)
at
org.eclipse.equinox.http.servlet.internal.HttpServiceImpl$3.run(HttpServiceImpl.java:148)
at
org.eclipse.equinox.http.servlet.internal.HttpServiceImpl$3.run(HttpServiceImpl.java:1)
at java.security.AccessController.doPrivileged(Native Method)
at
org.eclipse.equinox.http.servlet.internal.HttpServiceImpl.registerServlet(HttpServiceImpl.java:145)
<stack deleted>
There is an endpoint already running on /.
at
org.apache.cxf.jaxrs.JAXRSBindingFactory.addListener(JAXRSBindingFactory.java:86)
at org.apache.cxf.endpoint.ServerImpl.start(ServerImpl.java:123)
at
org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:206)
... 84 more
--
--
David J. M. Karlsen - http://www.linkedin.com/in/davidkarlsen
Scott Lewis
2018-10-21 16:53:19 UTC
Permalink
Post by David Karlsen
If you have separate CxfBus'es per servlet it should work AFAIK.
It seems that by default in the superclass
org.apache.cxf.transport.servlet.CXFNonSpringServlet.init(ServletConfig)
the loadBus method is called during init, and that's implemented as:

    protected void loadBus(ServletConfig sc) {
        this.bus = BusFactory.newInstance().createBus();
    }

This seems to be a separate Bus instance (createBus())...apparently of
the same type.

So the two servlet instances do have separate Bus instances, but I still
get the error described.

Thanksinadvance,

Scott
Post by David Karlsen
Post by Scott Lewis
Hi,
Using OSGi HttpService, if I register more than one instance of
CXFNonSpringJaxrsServlet...i.e. at different aliases...then I get an
exception. For example if I have two aliases
'/foo' -> instance 1 of CXFNonSpringJaxrsServlet
'/bar' -> instance 2 of CXFNonSpringJaxrsServlet
on the second call to httpService.registerServlet I get exception and
stack trace below.
Is there a way to create/configure/register multiple
CXFNonSpringJaxrsServlet instances...and/or the underlying
JAXRSServerFactoryBean so that they don't conflict in this manner? Or
is there some other cxf jaxrs servlet/bean classes that would allow this?
Thanksinadvance,
Scott
org.apache.cxf.service.factory.ServiceConstructionException
at
org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:219)
at
org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet.createServerFromApplication(CXFNonSpringJaxrsServlet.java:546)
at
org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet.init(CXFNonSpringJaxrsServlet.java:115)
at
org.eclipse.equinox.http.servlet.internal.HttpServiceRuntimeImpl$LegacyServlet.init(HttpServiceRuntimeImpl.java:1206)
at
org.eclipse.equinox.http.servlet.internal.registration.EndpointRegistration.init(EndpointRegistration.java:94)
at
org.eclipse.equinox.http.servlet.internal.context.ContextController.doAddServletRegistration(ContextController.java:596)
at
org.eclipse.equinox.http.servlet.internal.context.ContextController.addServletRegistration(ContextController.java:450)
at
org.eclipse.equinox.http.servlet.internal.customizer.ContextServletTrackerCustomizer.addingService(ContextServletTrackerCustomizer.java:55)
at
org.eclipse.equinox.http.servlet.internal.customizer.ContextServletTrackerCustomizer.addingService(ContextServletTrackerCustomizer.java:1)
at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)
at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
at
org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
at
org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
at
org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:901)
at
org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:109)
at
org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:920)
at
org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
at
org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:862)
at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:801)
at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:127)
at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:225)
at
org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:469)
at
org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:487)
at
org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:1004)
at
org.eclipse.equinox.http.servlet.internal.HttpServiceRuntimeImpl.registerHttpServiceServlet(HttpServiceRuntimeImpl.java:722)
at
org.eclipse.equinox.http.servlet.internal.HttpServiceImpl$3.run(HttpServiceImpl.java:148)
at
org.eclipse.equinox.http.servlet.internal.HttpServiceImpl$3.run(HttpServiceImpl.java:1)
at java.security.AccessController.doPrivileged(Native Method)
at
org.eclipse.equinox.http.servlet.internal.HttpServiceImpl.registerServlet(HttpServiceImpl.java:145)
<stack deleted>
There is an endpoint already running on /.
at
org.apache.cxf.jaxrs.JAXRSBindingFactory.addListener(JAXRSBindingFactory.java:86)
at org.apache.cxf.endpoint.ServerImpl.start(ServerImpl.java:123)
at
org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:206)
... 84 more
Scott Lewis
2018-10-30 15:56:21 UTC
Permalink
Separate bus instances are created for the CXFNonSpringServlets init,
but what apparently blows up is the create/use/start of more than one
org.apache.cxf.endpoint.ServerImpl instance at:  at
org.apache.cxf.endpoint.ServerImpl.start(ServerImpl.java:123).

Any insights on how to avoid/work around this?

Scott
Post by Scott Lewis
Post by David Karlsen
If you have separate CxfBus'es per servlet it should work AFAIK.
It seems that by default in the superclass
org.apache.cxf.transport.servlet.CXFNonSpringServlet.init(ServletConfig)
    protected void loadBus(ServletConfig sc) {
        this.bus = BusFactory.newInstance().createBus();
    }
This seems to be a separate Bus instance (createBus())...apparently of
the same type.
So the two servlet instances do have separate Bus instances, but I
still get the error described.
Thanksinadvance,
Scott
Post by David Karlsen
Den lør. 20. okt. 2018 kl. 23:32 skrev Scott Lewis
Post by Scott Lewis
Hi,
Using OSGi HttpService, if I register more than one instance of
CXFNonSpringJaxrsServlet...i.e. at different aliases...then I get an
exception.  For example if I have two aliases
'/foo' -> instance 1 of CXFNonSpringJaxrsServlet
'/bar' -> instance 2 of CXFNonSpringJaxrsServlet
on the second call to httpService.registerServlet I get exception and
stack trace below.
Is there a way to create/configure/register multiple
CXFNonSpringJaxrsServlet instances...and/or the underlying
JAXRSServerFactoryBean so that they don't conflict in this manner?  Or
is there some other cxf jaxrs servlet/bean classes that would allow this?
Thanksinadvance,
Scott
org.apache.cxf.service.factory.ServiceConstructionException
      at
org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:219)
      at
org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet.createServerFromApplication(CXFNonSpringJaxrsServlet.java:546)
      at
org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet.init(CXFNonSpringJaxrsServlet.java:115)
      at
org.eclipse.equinox.http.servlet.internal.HttpServiceRuntimeImpl$LegacyServlet.init(HttpServiceRuntimeImpl.java:1206)
      at
org.eclipse.equinox.http.servlet.internal.registration.EndpointRegistration.init(EndpointRegistration.java:94)
      at
org.eclipse.equinox.http.servlet.internal.context.ContextController.doAddServletRegistration(ContextController.java:596)
      at
org.eclipse.equinox.http.servlet.internal.context.ContextController.addServletRegistration(ContextController.java:450)
      at
org.eclipse.equinox.http.servlet.internal.customizer.ContextServletTrackerCustomizer.addingService(ContextServletTrackerCustomizer.java:55)
      at
org.eclipse.equinox.http.servlet.internal.customizer.ContextServletTrackerCustomizer.addingService(ContextServletTrackerCustomizer.java:1)
      at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)
      at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
      at
org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
      at
org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
      at
org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:901)
      at
org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:109)
      at
org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:920)
      at
org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
      at
org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
      at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:862)
      at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:801)
      at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:127)
      at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:225)
      at
org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:469)
      at
org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:487)
      at
org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:1004)
      at
org.eclipse.equinox.http.servlet.internal.HttpServiceRuntimeImpl.registerHttpServiceServlet(HttpServiceRuntimeImpl.java:722)
      at
org.eclipse.equinox.http.servlet.internal.HttpServiceImpl$3.run(HttpServiceImpl.java:148)
      at
org.eclipse.equinox.http.servlet.internal.HttpServiceImpl$3.run(HttpServiceImpl.java:1)
      at java.security.AccessController.doPrivileged(Native Method)
      at
org.eclipse.equinox.http.servlet.internal.HttpServiceImpl.registerServlet(HttpServiceImpl.java:145)
<stack deleted>
There is an endpoint already running on /.
      at
org.apache.cxf.jaxrs.JAXRSBindingFactory.addListener(JAXRSBindingFactory.java:86)
      at org.apache.cxf.endpoint.ServerImpl.start(ServerImpl.java:123)
      at
org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:206)
      ... 84 more
David Karlsen
2018-10-30 19:53:54 UTC
Permalink
I register several jaxrsServerFactoryBean beans with the same but - under
different addresses - which works fine
Post by Scott Lewis
Separate bus instances are created for the CXFNonSpringServlets init,
but what apparently blows up is the create/use/start of more than one
org.apache.cxf.endpoint.ServerImpl instance at: at
org.apache.cxf.endpoint.ServerImpl.start(ServerImpl.java:123).
Any insights on how to avoid/work around this?
Scott
Post by Scott Lewis
Post by David Karlsen
If you have separate CxfBus'es per servlet it should work AFAIK.
It seems that by default in the superclass
org.apache.cxf.transport.servlet.CXFNonSpringServlet.init(ServletConfig)
protected void loadBus(ServletConfig sc) {
this.bus = BusFactory.newInstance().createBus();
}
This seems to be a separate Bus instance (createBus())...apparently of
the same type.
So the two servlet instances do have separate Bus instances, but I
still get the error described.
Thanksinadvance,
Scott
Post by David Karlsen
Den lÞr. 20. okt. 2018 kl. 23:32 skrev Scott Lewis
Post by Scott Lewis
Hi,
Using OSGi HttpService, if I register more than one instance of
CXFNonSpringJaxrsServlet...i.e. at different aliases...then I get an
exception. For example if I have two aliases
'/foo' -> instance 1 of CXFNonSpringJaxrsServlet
'/bar' -> instance 2 of CXFNonSpringJaxrsServlet
on the second call to httpService.registerServlet I get exception and
stack trace below.
Is there a way to create/configure/register multiple
CXFNonSpringJaxrsServlet instances...and/or the underlying
JAXRSServerFactoryBean so that they don't conflict in this manner? Or
is there some other cxf jaxrs servlet/bean classes that would allow this?
Thanksinadvance,
Scott
org.apache.cxf.service.factory.ServiceConstructionException
at
org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:219)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet.createServerFromApplication(CXFNonSpringJaxrsServlet.java:546)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet.init(CXFNonSpringJaxrsServlet.java:115)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.HttpServiceRuntimeImpl$LegacyServlet.init(HttpServiceRuntimeImpl.java:1206)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.registration.EndpointRegistration.init(EndpointRegistration.java:94)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.context.ContextController.doAddServletRegistration(ContextController.java:596)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.context.ContextController.addServletRegistration(ContextController.java:450)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.customizer.ContextServletTrackerCustomizer.addingService(ContextServletTrackerCustomizer.java:55)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.customizer.ContextServletTrackerCustomizer.addingService(ContextServletTrackerCustomizer.java:1)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
at
org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:901)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:109)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:920)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:862)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:801)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:127)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:225)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:469)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:487)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:1004)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.HttpServiceRuntimeImpl.registerHttpServiceServlet(HttpServiceRuntimeImpl.java:722)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.HttpServiceImpl$3.run(HttpServiceImpl.java:148)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.HttpServiceImpl$3.run(HttpServiceImpl.java:1)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at java.security.AccessController.doPrivileged(Native Method)
at
org.eclipse.equinox.http.servlet.internal.HttpServiceImpl.registerServlet(HttpServiceImpl.java:145)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
<stack deleted>
There is an endpoint already running on /.
at
org.apache.cxf.jaxrs.JAXRSBindingFactory.addListener(JAXRSBindingFactory.java:86)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at org.apache.cxf.endpoint.ServerImpl.start(ServerImpl.java:123)
at
org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:206)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
... 84 more
--
--
David J. M. Karlsen - http://www.linkedin.com/in/davidkarlsen
Scott Lewis
2018-10-30 21:40:57 UTC
Permalink
Post by David Karlsen
I register several jaxrsServerFactoryBean beans with the same but - under
different addresses - which works fine
So that I understand:  you register multiple beans with the same
instance of CXFNonSpringServlet...with different aliases (e.g. '/foo'
and '/bar')?   I also assume you are not using the OSGi HttpService to
register multiple servlet instances, correct?

If at all possible, I would like to use multiple instances of
CXFNonSpringServlet with HttpService, and not have them conflict.

Scott
Post by David Karlsen
Post by Scott Lewis
Separate bus instances are created for the CXFNonSpringServlets init,
but what apparently blows up is the create/use/start of more than one
org.apache.cxf.endpoint.ServerImpl instance at: at
org.apache.cxf.endpoint.ServerImpl.start(ServerImpl.java:123).
Any insights on how to avoid/work around this?
Scott
Post by Scott Lewis
Post by David Karlsen
If you have separate CxfBus'es per servlet it should work AFAIK.
It seems that by default in the superclass
org.apache.cxf.transport.servlet.CXFNonSpringServlet.init(ServletConfig)
protected void loadBus(ServletConfig sc) {
this.bus = BusFactory.newInstance().createBus();
}
This seems to be a separate Bus instance (createBus())...apparently of
the same type.
So the two servlet instances do have separate Bus instances, but I
still get the error described.
Thanksinadvance,
Scott
Post by David Karlsen
Den lør. 20. okt. 2018 kl. 23:32 skrev Scott Lewis
Post by Scott Lewis
Hi,
Using OSGi HttpService, if I register more than one instance of
CXFNonSpringJaxrsServlet...i.e. at different aliases...then I get an
exception. For example if I have two aliases
'/foo' -> instance 1 of CXFNonSpringJaxrsServlet
'/bar' -> instance 2 of CXFNonSpringJaxrsServlet
on the second call to httpService.registerServlet I get exception and
stack trace below.
Is there a way to create/configure/register multiple
CXFNonSpringJaxrsServlet instances...and/or the underlying
JAXRSServerFactoryBean so that they don't conflict in this manner? Or
is there some other cxf jaxrs servlet/bean classes that would allow this?
Thanksinadvance,
Scott
org.apache.cxf.service.factory.ServiceConstructionException
at
org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:219)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet.createServerFromApplication(CXFNonSpringJaxrsServlet.java:546)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet.init(CXFNonSpringJaxrsServlet.java:115)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.HttpServiceRuntimeImpl$LegacyServlet.init(HttpServiceRuntimeImpl.java:1206)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.registration.EndpointRegistration.init(EndpointRegistration.java:94)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.context.ContextController.doAddServletRegistration(ContextController.java:596)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.context.ContextController.addServletRegistration(ContextController.java:450)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.customizer.ContextServletTrackerCustomizer.addingService(ContextServletTrackerCustomizer.java:55)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.customizer.ContextServletTrackerCustomizer.addingService(ContextServletTrackerCustomizer.java:1)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
at
org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:901)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:109)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:920)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:862)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:801)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:127)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:225)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:469)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:487)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:1004)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.HttpServiceRuntimeImpl.registerHttpServiceServlet(HttpServiceRuntimeImpl.java:722)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.HttpServiceImpl$3.run(HttpServiceImpl.java:148)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.HttpServiceImpl$3.run(HttpServiceImpl.java:1)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at java.security.AccessController.doPrivileged(Native Method)
at
org.eclipse.equinox.http.servlet.internal.HttpServiceImpl.registerServlet(HttpServiceImpl.java:145)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
<stack deleted>
There is an endpoint already running on /.
at
org.apache.cxf.jaxrs.JAXRSBindingFactory.addListener(JAXRSBindingFactory.java:86)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at org.apache.cxf.endpoint.ServerImpl.start(ServerImpl.java:123)
at
org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:206)
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
... 84 more
David Karlsen
2018-10-30 21:44:20 UTC
Permalink
Yes correct.
I have two servlets - one for jax-ws, one for jax-rs, the latter with two
jaxrsServerFactories.
Post by David Karlsen
I register several jaxrsServerFactoryBean beans with the same but - under
different addresses - which works fine
So that I understand: you register multiple beans with the same
instance of CXFNonSpringServlet...with different aliases (e.g. '/foo'
and '/bar')? I also assume you are not using the OSGi HttpService to
register multiple servlet instances, correct?
If at all possible, I would like to use multiple instances of
CXFNonSpringServlet with HttpService, and not have them conflict.
Scott
Post by David Karlsen
Post by Scott Lewis
Separate bus instances are created for the CXFNonSpringServlets init,
but what apparently blows up is the create/use/start of more than one
org.apache.cxf.endpoint.ServerImpl instance at: at
org.apache.cxf.endpoint.ServerImpl.start(ServerImpl.java:123).
Any insights on how to avoid/work around this?
Scott
Post by Scott Lewis
Post by David Karlsen
If you have separate CxfBus'es per servlet it should work AFAIK.
It seems that by default in the superclass
org.apache.cxf.transport.servlet.CXFNonSpringServlet.init(ServletConfig)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
protected void loadBus(ServletConfig sc) {
this.bus = BusFactory.newInstance().createBus();
}
This seems to be a separate Bus instance (createBus())...apparently of
the same type.
So the two servlet instances do have separate Bus instances, but I
still get the error described.
Thanksinadvance,
Scott
Post by David Karlsen
Den lÞr. 20. okt. 2018 kl. 23:32 skrev Scott Lewis
Post by Scott Lewis
Hi,
Using OSGi HttpService, if I register more than one instance of
CXFNonSpringJaxrsServlet...i.e. at different aliases...then I get an
exception. For example if I have two aliases
'/foo' -> instance 1 of CXFNonSpringJaxrsServlet
'/bar' -> instance 2 of CXFNonSpringJaxrsServlet
on the second call to httpService.registerServlet I get exception and
stack trace below.
Is there a way to create/configure/register multiple
CXFNonSpringJaxrsServlet instances...and/or the underlying
JAXRSServerFactoryBean so that they don't conflict in this manner?
Or
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
is there some other cxf jaxrs servlet/bean classes that would allow this?
Thanksinadvance,
Scott
org.apache.cxf.service.factory.ServiceConstructionException
at
org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:219)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet.createServerFromApplication(CXFNonSpringJaxrsServlet.java:546)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet.init(CXFNonSpringJaxrsServlet.java:115)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.HttpServiceRuntimeImpl$LegacyServlet.init(HttpServiceRuntimeImpl.java:1206)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.registration.EndpointRegistration.init(EndpointRegistration.java:94)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.context.ContextController.doAddServletRegistration(ContextController.java:596)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.context.ContextController.addServletRegistration(ContextController.java:450)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.customizer.ContextServletTrackerCustomizer.addingService(ContextServletTrackerCustomizer.java:55)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.customizer.ContextServletTrackerCustomizer.addingService(ContextServletTrackerCustomizer.java:1)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
at
org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:901)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:109)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:920)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:862)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:801)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:127)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:225)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:469)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:487)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:1004)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.HttpServiceRuntimeImpl.registerHttpServiceServlet(HttpServiceRuntimeImpl.java:722)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.HttpServiceImpl$3.run(HttpServiceImpl.java:148)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.eclipse.equinox.http.servlet.internal.HttpServiceImpl$3.run(HttpServiceImpl.java:1)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at java.security.AccessController.doPrivileged(Native Method)
at
org.eclipse.equinox.http.servlet.internal.HttpServiceImpl.registerServlet(HttpServiceImpl.java:145)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
<stack deleted>
There is an endpoint already running on /.
at
org.apache.cxf.jaxrs.JAXRSBindingFactory.addListener(JAXRSBindingFactory.java:86)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.apache.cxf.endpoint.ServerImpl.start(ServerImpl.java:123)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
at
org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:206)
Post by David Karlsen
Post by Scott Lewis
Post by Scott Lewis
Post by David Karlsen
Post by Scott Lewis
... 84 more
--
--
David J. M. Karlsen - http://www.linkedin.com/in/davidkarlsen
Loading...