46
46
import javax .xml .transform .stax .StAXSource ;
47
47
import java .io .IOException ;
48
48
import java .io .StringWriter ;
49
- import java .lang .ref .WeakReference ;
50
49
import java .net .URI ;
51
50
import java .util .IdentityHashMap ;
52
51
import java .util .Map ;
@@ -57,7 +56,7 @@ public class XMLReader implements AutoCloseable {
57
56
private final DepthXMLStreamReader reader ;
58
57
59
58
private final Map <Class <?>, ObjectBuilder <?>> builderCache = new IdentityHashMap <>();
60
- private WeakReference <?> parent = new WeakReference <>( null ) ;
59
+ private Object parent ;
61
60
private boolean createDOMAsFallback ;
62
61
private Properties properties ;
63
62
private Transformer transformer ;
@@ -126,8 +125,8 @@ public void close() throws XMLReadException {
126
125
} catch (XMLStreamException e ) {
127
126
throw new XMLReadException ("Caused by:" , e );
128
127
} finally {
129
- parent .clear ();
130
128
builderCache .clear ();
129
+ parent = null ;
131
130
}
132
131
}
133
132
@@ -187,7 +186,7 @@ public <T> T getObject(Class<T> type) throws ObjectBuildException, XMLReadExcept
187
186
QName name = reader .getName ();
188
187
ObjectBuilder <T > builder = xmlObjects .getBuilder (name , type );
189
188
if (builder != null ) {
190
- T object = builder .createObject (name , parent . get () );
189
+ T object = builder .createObject (name , parent );
191
190
if (object == null ) {
192
191
throw new ObjectBuildException ("The builder " + builder .getClass ().getName () + " created a null value." );
193
192
}
@@ -208,7 +207,7 @@ public <T> T getObjectUsingBuilder(ObjectBuilder<T> builder) throws ObjectBuildE
208
207
}
209
208
210
209
QName name = reader .getName ();
211
- T object = builder .createObject (name , parent . get () );
210
+ T object = builder .createObject (name , parent );
212
211
if (object == null ) {
213
212
throw new ObjectBuildException ("The builder " + builder .getClass ().getName () + " created a null value." );
214
213
}
@@ -248,9 +247,9 @@ public <T> T fillObjectUsingBuilder(T object, ObjectBuilder<T> builder) throws O
248
247
}
249
248
250
249
private <T > T processObject (T object , QName name , ObjectBuilder <T > builder ) throws ObjectBuildException , XMLReadException {
251
- WeakReference <?> previous = parent ;
250
+ Object previous = parent ;
252
251
try {
253
- parent = new WeakReference <>( object ) ;
252
+ parent = object ;
254
253
int stopAt = reader .getDepth () - 1 ;
255
254
int childLevel = reader .getDepth () + 1 ;
256
255
0 commit comments