127 * All the bridge classes. |
127 * All the bridge classes. |
128 */ |
128 */ |
129 private final Map<TypeReference,Bridge> bridges = new LinkedHashMap<TypeReference,Bridge>(); |
129 private final Map<TypeReference,Bridge> bridges = new LinkedHashMap<TypeReference,Bridge>(); |
130 |
130 |
131 /** |
131 /** |
132 * Shared instance of {@link TransformerFactory}. |
|
133 * Lock before use, because a {@link TransformerFactory} is not thread-safe |
|
134 * whereas {@link JAXBContextImpl} is. |
|
135 * Lazily created. |
|
136 */ |
|
137 private volatile static SAXTransformerFactory tf; |
|
138 |
|
139 /** |
|
140 * Shared instance of {@link DocumentBuilder}. |
132 * Shared instance of {@link DocumentBuilder}. |
141 * Lock before use. Lazily created. |
133 * Lock before use. Lazily created. |
142 */ |
134 */ |
143 private static DocumentBuilder db; |
135 private static DocumentBuilder db; |
144 |
136 |
703 /** |
695 /** |
704 * Creates a new identity transformer. |
696 * Creates a new identity transformer. |
705 */ |
697 */ |
706 static Transformer createTransformer(boolean disableSecureProcessing) { |
698 static Transformer createTransformer(boolean disableSecureProcessing) { |
707 try { |
699 try { |
708 if (tf==null) { |
700 SAXTransformerFactory tf = (SAXTransformerFactory)XmlFactory.createTransformerFactory(disableSecureProcessing); |
709 synchronized(JAXBContextImpl.class) { |
|
710 if (tf==null) { |
|
711 tf = (SAXTransformerFactory)XmlFactory.createTransformerFactory(disableSecureProcessing); |
|
712 } |
|
713 } |
|
714 } |
|
715 return tf.newTransformer(); |
701 return tf.newTransformer(); |
716 } catch (TransformerConfigurationException e) { |
702 } catch (TransformerConfigurationException e) { |
717 throw new Error(e); // impossible |
703 throw new Error(e); // impossible |
718 } |
704 } |
719 } |
705 } |
721 /** |
707 /** |
722 * Creates a new identity transformer. |
708 * Creates a new identity transformer. |
723 */ |
709 */ |
724 public static TransformerHandler createTransformerHandler(boolean disableSecureProcessing) { |
710 public static TransformerHandler createTransformerHandler(boolean disableSecureProcessing) { |
725 try { |
711 try { |
726 if (tf==null) { |
712 SAXTransformerFactory tf = (SAXTransformerFactory)XmlFactory.createTransformerFactory(disableSecureProcessing); |
727 synchronized(JAXBContextImpl.class) { |
|
728 if (tf==null) { |
|
729 tf = (SAXTransformerFactory)XmlFactory.createTransformerFactory(disableSecureProcessing); |
|
730 } |
|
731 } |
|
732 } |
|
733 return tf.newTransformerHandler(); |
713 return tf.newTransformerHandler(); |
734 } catch (TransformerConfigurationException e) { |
714 } catch (TransformerConfigurationException e) { |
735 throw new Error(e); // impossible |
715 throw new Error(e); // impossible |
736 } |
716 } |
737 } |
717 } |