Hi Robert! I guess our lookup code does pretty much the same like with every other Geronimo spec.
We first try to pickup a JsonProvider via the ServiceLoader mechanism. Of course that means that META-INF/services/javax.json.spi.JsonProvider needs to be 'visible' via OSGi tricks. If we don't find that then we try to load the hardcoded default provider which is DEFAULT_PROVIDER = "org.apache.johnzon.core.JsonProviderImpl"; I assume since we do not OSGi-import johnzon in the geronimo-json_1.1-spec.jar, we also don't see the JsonProviderImpl from Johnzon from the spec jar? I'm not really deep into OSGi, but I assume Romain can help you. LieGrue, strub > Am 23.11.2016 um 23:37 schrieb Robert Munteanu <romb...@apache.org>: > > Hi, > > I noticed that Johnzon has OSGi headers, which is nice :-) > > I am trying to setup Johnzon in a minimal OSGi container. I have a > bundle which performs a very simple JSON rendering: > > try ( JsonGenerator g = > Json.createGenerator(resp.getOutputStream())) { > resp.setContentType("application/json"); > g.writeStartObject() > .write("enabled", routerAdmin.isWlanEnabled() ) > .writeEnd(); > } catch (AuthException e) { > resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR > ); > } > > I am deploying the following bundles to my container: > > - Johnzon :: Core (0.9.4) - org.apache.johnzon:johnzon-core:0.9.4 > - Apache Geronimo JSon Spec 1.0 (1.0.0.alpha-1) - > org.apache.geronimo.specs:geronimo-json_1.0_spec:1.0-alpha-1 > > The code fails with > > javax.json.JsonException: org.apache.johnzon.core.JsonProviderImpl > not found > > (full stack trace at the end ). > > My question is - is this a supported scenario? Looking at the bundle > headers I don't see how the wiring could happen between these the JSON > API and Johnzon Core bundles, as they know nothing about each other. > > (Please keep me in CC, I am not subscribed). > > Thanks, > > Robert > > javax.json.JsonException: org.apache.johnzon.core.JsonProviderImpl not > found > at > javax.json.spi.JsonProvider.doLoadProvider(JsonProvider.java:132) > at javax.json.spi.JsonProvider.provider(JsonProvider.java:64) > at javax.json.Json.createGenerator(Json.java:48) > at > ro.lmn.routeradmin.web.impl.AdminServlet.doGet(AdminServlet.java:33) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:618) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) > at > org.apache.felix.http.base.internal.handler.ServletHandler.handle(Servl > etHandler.java:85) > at > org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(I > nvocationChain.java:79) > at > org.apache.felix.http.base.internal.dispatch.Dispatcher.dispatch(Dispat > cher.java:124) > at > org.apache.felix.http.base.internal.DispatcherServlet.service(Dispatche > rServlet.java:61) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) > at > org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:845) > at > org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:5 > 83) > at > org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler > .java:224) > at > org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler > .java:1174) > at > org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:51 > 1) > at > org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler. > java:185) > at > org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler. > java:1106) > at > org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.jav > a:141) > at > org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(Contex > tHandlerCollection.java:213) > at > org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.j > ava:134) > at org.eclipse.jetty.server.Server.handle(Server.java:524) > at > org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:319) > at > org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java: > 253) > at > org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(Abstract > Connection.java:273) > at > org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95) > at > org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint. > java:93) > at > org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executePro > duceConsume(ExecuteProduceConsume.java:303) > at > org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceCon > sume(ExecuteProduceConsume.java:148) > at > org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(Execut > eProduceConsume.java:136) > at > org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool. > java:671) > at > org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.j > ava:589) > at java.lang.Thread.run(Thread.java:745) > Caused by: java.lang.ClassNotFoundException: > org.apache.johnzon.core.JsonProviderImpl > at java.net.URLClassLoader.findClass(URLClassLoader.java:381) > at java.lang.ClassLoader.loadClass(ClassLoader.java:424) > at > sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) > at java.lang.ClassLoader.loadClass(ClassLoader.java:357) > at > javax.json.spi.JsonProvider.doLoadProvider(JsonProvider.java:129) > ... 32 more