diff -r 8c0b6bccfe47 -r 0989ad8c0860 src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/SingleMapNodeProperty.java --- a/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/SingleMapNodeProperty.java Thu Apr 04 19:05:24 2013 -0700 +++ b/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/SingleMapNodeProperty.java Tue Apr 09 14:51:13 2013 +0100 @@ -142,6 +142,7 @@ private ThreadLocal target = new ThreadLocal(); private ThreadLocal map = new ThreadLocal(); + private int depthCounter = 0; // needed to clean ThreadLocals @Override public void startElement(UnmarshallingContext.State state, TagName ea) throws SAXException { @@ -149,6 +150,7 @@ try { target.set((BeanT)state.prev.target); map.set(acc.get(target.get())); + depthCounter++; if(map.get() == null) { map.set(ClassFactory.create(mapImplClass)); } @@ -166,7 +168,10 @@ super.leaveElement(state, ea); try { acc.set(target.get(), map.get()); - target.remove(); + if (--depthCounter == 0) { + target.remove(); + map.remove(); + } } catch (AccessorException ex) { handleGenericException(ex,true); }