users@jersey.java.net

[Jersey] Re: JSON natural on GF 3.1 b40

From: jmilkiewicz <jmilkiewicz_at_gmail.com>
Date: Mon, 31 Jan 2011 12:15:49 -0800 (PST)

Hi Pavel

Thanks for a fast answer but unfortunately it still does not work.

1 - adding jaxb-api-osgi-2.2.2.jar and jaxb-osgi-2.2.3-1.jar to GF 3.1
modules folder
    blows out glassfish: my application and admin console are not
deployed/reachable.
In my log file i can see:

SEVERE: Exception while loading the app : java.lang.RuntimeException:
java.lang.NullPointerException
com.google.common.collect.ComputationException:
java.lang.RuntimeException: java.lang.NullPointerException
        at com.google.common.collect.ComputingConcurrentHashMap.compute(ComputingConcurrentHashMap.java:218)
        at com.google.common.collect.ComputingConcurrentHashMap.apply(ComputingConcurrentHashMap.java:100)
        at com.google.common.collect.MapMaker$ComputingMapAdapter.get(MapMaker.java:515)
        at org.jboss.weld.resources.ClassTransformer.loadClass(ClassTransformer.java:183)
        at org.jboss.weld.bootstrap.BeanDeployer.addClass(BeanDeployer.java:96)
        at org.jboss.weld.bootstrap.BeanDeployer.addClasses(BeanDeployer.java:133)
        at org.jboss.weld.bootstrap.BeanDeployment.deployBeans(BeanDeployment.java:192)
        at org.jboss.weld.bootstrap.WeldBootstrap.deployBeans(WeldBootstrap.java:364)
        at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:170)
        at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:128)
        at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:262)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:460)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240)
        at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:370)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:354)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:369)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1080)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:95)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1260)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1248)
        at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:453)
        at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:220)
        at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:168)
        at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:234)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.RuntimeException: java.lang.NullPointerException
        at org.jboss.weld.util.reflection.SecureReflectionAccess.runAndWrap(SecureReflectionAccess.java:71)
        at org.jboss.weld.util.reflection.SecureReflections.getDeclaredFields(SecureReflections.java:111)
        at org.jboss.weld.introspector.jlr.WeldClassImpl.<init>(WeldClassImpl.java:163)
        at org.jboss.weld.introspector.jlr.WeldClassImpl.of(WeldClassImpl.java:124)
        at org.jboss.weld.resources.ClassTransformer$TransformTypeToWeldClass.apply(ClassTransformer.java:54)
        at org.jboss.weld.resources.ClassTransformer$TransformTypeToWeldClass.apply(ClassTransformer.java:42)
        at com.google.common.collect.ComputingConcurrentHashMap.compute(ComputingConcurrentHashMap.java:206)
        ... 38 more
Caused by: java.lang.NullPointerException
        at org.apache.felix.framework.resolver.ResolverImpl.permutateIfNeeded(ResolverImpl.java:1140)
        at org.apache.felix.framework.resolver.ResolverImpl.checkPackageSpaceConsistency(ResolverImpl.java:1066)
        at org.apache.felix.framework.resolver.ResolverImpl.resolve(ResolverImpl.java:176)
        at org.apache.felix.framework.Felix$FelixResolver.resolve(Felix.java:4066)
        at org.apache.felix.framework.ModuleImpl.searchDynamicImports(ModuleImpl.java:1412)
        at org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:734)
        at org.apache.felix.framework.ModuleImpl.access$400(ModuleImpl.java:71)
        at org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1768)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        at org.apache.felix.framework.ModuleImpl.getClassByDelegation(ModuleImpl.java:645)
        at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1604)
        at org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:904)
        at org.jvnet.hk2.osgiadapter.OSGiModuleImpl$3$1.run(OSGiModuleImpl.java:399)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.jvnet.hk2.osgiadapter.OSGiModuleImpl$3.loadClass(OSGiModuleImpl.java:395)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        at com.sun.enterprise.v3.server.APIClassLoaderServiceImpl$APIClassLoader.loadClass(APIClassLoaderServiceImpl.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:296)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:296)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1465)
        at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1368)
        at java.lang.Class.getDeclaredFields0(Native Method)
        at java.lang.Class.privateGetDeclaredFields(Class.java:2291)
        at java.lang.Class.getDeclaredFields(Class.java:1743)
        at org.jboss.weld.util.reflection.SecureReflections$4.work(SecureReflections.java:116)
        at org.jboss.weld.util.reflection.SecureReflections$4.work(SecureReflections.java:112)
        at org.jboss.weld.util.reflection.SecureReflectionAccess.run(SecureReflectionAccess.java:54)
        at org.jboss.weld.util.reflection.SecureReflectionAccess.runAndWrap(SecureReflectionAccess.java:67)
        ... 44 more

When comparing GF 3.0.1 b22 with GF 3.1 b40 i noticed that
beside the latter having jaxb jars removed from modules folder i think
there are some changes in felix config.properties file. Maybe i need
to investigate it further...


2. adding jaxb-osgi-2.2.3-1.jar to WEB-INF/lib and setting
class-loader delegate to false does not work either.

SEVERE: NATURAL JSON notation configured, but JAXB RI 2.1.10 not
found. For the recent builds to get this working correctly, you need
even at least JAXB version 2.1.12. Please add it to your classpath!
SEVERE: The provider class, class
pl.assetwell.demo.infrastructure.MyJAXBContextResolver, could not be
instantiated. Processing will continue but the class will not be
utilized
java.lang.RuntimeException: NATURAL JSON notation configured, but JAXB
RI 2.1.10 not found. For the recent builds to get this working
correctly, you need even at least JAXB version 2.1.12. Please add it
to your classpath!
        at com.sun.jersey.api.json.JSONConfiguration.natural(JSONConfiguration.java:447)
        at pl.assetwell.demo.infrastructure.MyJAXBContextResolver.<init>(MyJAXBContextResolver.java:25)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)


This time i think i know why it can't work:
I understand that class-loader delegate=false forces application (war)
 to first load classes itself before delegation to parent (server)
classloader (PARENT-LAST).
If my understanding is correct than this approach can not work since
it is not class within my application is trying to load JAXB RI
2.1.12. According to stacktrace (above) JSONConfiguration tries to
check if proper version of JAXB is
present by execution of:
Class.forName("com.sun.xml.bind.annotation.OverrideAnnotationOf");

Since JSONConfiguration is bundled in jersey-json.jar withing GF
modules it will use it is own classloader or any other
parent(server)/OSGI classloader to find OverrideAnnotationOf class.
None of these classloaders will have access to application
classloader. Am i right on this ?

I can imagine i could copy some jersey-jars along with jaxb jars to
WEB-INF/lib and then specify class-loader delegate=false but this is
not what i would like to do...

I will try to check it with full GF 3.1 b40 or another/new build.


regards
Jakub Milkiewicz


2011/1/31 Pavel Bucek-2 [via Jersey]
<ml-node+5977495-628773308-315806_at_n2.nabble.com>:
> Hello Jakub,
>
> generally - update your java runtime; unfortunately, we currently
> available jdk versions don't have that recent jaxb version, so ..
>
> I guess putting jaxb-api-osgi.jar [1] and jaxb-osgi.jar [2] into
> glassfish/modules should work that out. Or you can upgrade to full
> profile, which provides newer jaxb implementation.
>
> Or, if you don't want to update your local glassfish installation, you
> could be able to package jaxb-osgi.jar into war and deploy it with your
> application; you might need to set classloader delegation to false
> (sun-web.xml: <class-loader delegate="false"/>).
>
> Regards,
> Pavel
>
> [1]
> http://download.java.net/maven/2/javax/xml/bind/jaxb-api-osgi/2.2.2/jaxb-api-osgi-2.2.2.jar
> [2]
> http://download.java.net/maven/2/com/sun/xml/bind/jaxb-osgi/2.2.3-1/jaxb-osgi-2.2.3-1.jar
>
> On 01/31/2011 03:45 PM, [hidden email] wrote:
>> Hi
>>
>> I am not sure if this mail should not be sent to glassfish user group
>> but i hope i can find some help here:
>>
>> I am trying to use JSON natural notation
>>
>> JAXBContext context = new
>> JSONJAXBContext(JSONConfiguration.natural().build()...
>>
>> The application worked as a charm on GF 3.0.1 but on GF 3.1. b40  web
>> profile (current the latest one as of yesterday) i got a nasty
>> exception with following header message:
>>
>> SEVERE: NATURAL JSON notation configured, but JAXB RI 2.1.10 not
>> found. For the recent builds to get this working correctly, you need
>> even at least JAXB version 2.1.12. Please add it to your classpath!
>> SEVERE: The provider class, class foo.bar.MyJAXBContextResolver, could
>> not be instantiated. Processing will continue but the class will not
>> be utilized
>>
>> Generally ,how to upgrade to JAXB 2.1 provided that JAXB 2 classes are
>> already bundled within JDK?
>>
>>
>> How to make an upgrade on GF 3.1 which does not have any of JAXB api/
>> JAXB impl osgified versions at all ( GF 3.0.1 indeed had jaxb-api-osgi
>> and jaxb-osgi.jar )  ?
>>
>> regards Jakub Milkiewicz
>>
>>
>
>
> ________________________________
> If you reply to this email, your message will be added to the discussion
> below:
> http://jersey.576304.n2.nabble.com/JSON-natural-on-GF-3-1-b40-tp5977358p5977495.html
> To start a new topic under Jersey, email
> ml-node+576304-221093730-315806_at_n2.nabble.com
> To unsubscribe from Jersey, click here.

-- 
View this message in context: http://jersey.576304.n2.nabble.com/JSON-natural-on-GF-3-1-b40-tp5977358p5978484.html
Sent from the Jersey mailing list archive at Nabble.com.