users@jaxb.java.net

Re: Unsynchronized HashMap bug

From: Iaroslav Savytskyi <iaroslav.savytskyi_at_oracle.com>
Date: Fri, 07 Dec 2012 14:50:50 +0100

Hi, John,

It's not easy to say what's wrong without seeing your code. Are you
working with JAXB in multithreaded app? May be it'll be good idea for
you to open bug on: http://java.net/jira/secure/Dashboard.jspa and put
there some simple testcase to reproduce this problem.

Thanks.
--
Best regards,
Iaroslav
On 03/12/12 22:58, John.E.Gregg_at_wellsfargo.com wrote:
> Hello all,
>
> While running a load test against a system using JAXB 2.2.4, we found a bug related to unsynchronized HashMap access.  I'm copying part of the stack trace below.  I don't know much about the internals of JAXB, but I see a lot of methods with generate/initialize/create in their names, so I can see why the caller wouldn't see a need to synchronize the JaxWsProxyFactoryBean.create() call.  The Map that gets corrupted comes from JAXBContextImpl.typeInfoSetCache.  I also looked at 2.2.6 but didn't see a fix.
>
> In the thread dump there were over 40 of these:
>
> "http--0.0.0.0-8180-35" daemon prio=6 tid=0x0000000010b98800 nid=0x1b44 runnable [0x000000001883c000]
>       java.lang.Thread.State: RUNNABLE
>       at java.util.HashMap.get(HashMap.java:320)
>       at com.sun.xml.bind.v2.model.impl.TypeInfoSetImpl.getXmlNs(TypeInfoSetImpl.java:341)
>       at com.sun.xml.bind.v2.schemagen.XmlSchemaGenerator$Namespace.writeTo(XmlSchemaGenerator.java:613)
>       at com.sun.xml.bind.v2.schemagen.XmlSchemaGenerator$Namespace.access$700(XmlSchemaGenerator.java:499)
>       at com.sun.xml.bind.v2.schemagen.XmlSchemaGenerator.write(XmlSchemaGenerator.java:481)
>       at com.sun.xml.bind.v2.runtime.JAXBContextImpl.generateSchema(JAXBContextImpl.java:822)
>       at org.apache.cxf.jaxb.JAXBUtils.generateJaxbSchemas(JAXBUtils.java:771)
>       at org.apache.cxf.jaxb.JAXBDataBinding.generateJaxbSchemas(JAXBDataBinding.java:396)
>       at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:323)
>       - locked<  0x00000007a7908180>  (a org.apache.cxf.jaxb.JAXBDataBinding)
>       at org.apache.cxf.service.factory.AbstractServiceFactoryBean.initializeDataBindings(AbstractServiceFactoryBean.java:86)
>       at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:445)
>       at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromClass(JaxWsServiceFactoryBean.java:682)
>       at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:508)
>       at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:242)
>       - locked<  0x00000007a7908280>  (a org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean)
>       at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:202)
>       at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:101)
>       at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:90)
>       at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:155)
>       - locked<  0x00000007a7908378>  (a org.apache.cxf.jaxws.JaxWsProxyFactoryBean)
>       at org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:153)
>       - locked<  0x00000007a7908378>  (a org.apache.cxf.jaxws.JaxWsProxyFactoryBean)
>       at org.apache.cxf.jaxws.JaxWsProxyFactoryBean$create.call(Unknown Source)
>
> Thanks
>
> John
>
>