aboutsummaryrefslogtreecommitdiffstats
path: root/src/ooxml/java/org
diff options
context:
space:
mode:
authorAndreas Beeker <kiwiwings@apache.org>2017-09-05 21:30:29 +0000
committerAndreas Beeker <kiwiwings@apache.org>2017-09-05 21:30:29 +0000
commit86d91cceef3c183d5f7858e2884059f79b2e07a9 (patch)
treed253f5ffb5c02d1e4ac6133f87ce93c4d278e7c8 /src/ooxml/java/org
parentbf28229cd706aea2f3e5b5e52a7b7cd88473b296 (diff)
downloadpoi-86d91cceef3c183d5f7858e2884059f79b2e07a9.tar.gz
poi-86d91cceef3c183d5f7858e2884059f79b2e07a9.zip
#61478 - POI OOXML-Schema lookup uses wrong classloader
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1807418 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/ooxml/java/org')
-rw-r--r--src/ooxml/java/org/apache/poi/POIXMLTypeLoader.java35
1 files changed, 21 insertions, 14 deletions
diff --git a/src/ooxml/java/org/apache/poi/POIXMLTypeLoader.java b/src/ooxml/java/org/apache/poi/POIXMLTypeLoader.java
index 911eef63d8..7452da8f71 100644
--- a/src/ooxml/java/org/apache/poi/POIXMLTypeLoader.java
+++ b/src/ooxml/java/org/apache/poi/POIXMLTypeLoader.java
@@ -33,6 +33,7 @@ import javax.xml.stream.XMLStreamReader;
import org.apache.poi.openxml4j.opc.PackageNamespaces;
import org.apache.poi.util.DocumentHelper;
+import org.apache.poi.util.Removal;
import org.apache.xmlbeans.SchemaType;
import org.apache.xmlbeans.SchemaTypeLoader;
import org.apache.xmlbeans.XmlBeans;
@@ -49,7 +50,7 @@ import org.xml.sax.SAXException;
@SuppressWarnings("deprecation")
public class POIXMLTypeLoader {
- private static ThreadLocal<ClassLoader> classLoader = new ThreadLocal<ClassLoader>();
+ private static ThreadLocal<SchemaTypeLoader> typeLoader = new ThreadLocal<SchemaTypeLoader>();
// TODO: Do these have a good home like o.a.p.openxml4j.opc.PackageNamespaces and PackageRelationshipTypes?
// These constants should be common to all of POI and easy to use by other applications such as Tika
@@ -109,20 +110,26 @@ public class POIXMLTypeLoader {
* when the user code is finalized.
*
* @param cl the classloader to be used when XmlBeans classes and definitions are looked up
+ * @deprecated in POI 3.17 - setting a classloader from the outside is now obsolete,
+ * the classloader of the SchemaType will be used
*/
+ @Deprecated
+ @Removal(version="4.0")
public static void setClassLoader(ClassLoader cl) {
- classLoader.set(cl);
}
- private static SchemaTypeLoader getTypeLoader() {
- ClassLoader cl = classLoader.get();
- return (cl == null)
- ? XmlBeans.getContextTypeLoader()
- : XmlBeans.typeLoaderForClassLoader(cl);
+ private static SchemaTypeLoader getTypeLoader(SchemaType type) {
+ SchemaTypeLoader tl = typeLoader.get();
+ if (tl == null) {
+ ClassLoader cl = type.getClass().getClassLoader();
+ tl = XmlBeans.typeLoaderForClassLoader(cl);
+ typeLoader.set(tl);
+ }
+ return tl;
}
public static XmlObject newInstance(SchemaType type, XmlOptions options) {
- return getTypeLoader().newInstance(type, getXmlOptions(options));
+ return getTypeLoader(type).newInstance(type, getXmlOptions(options));
}
public static XmlObject parse(String xmlText, SchemaType type, XmlOptions options) throws XmlException {
@@ -154,34 +161,34 @@ public class POIXMLTypeLoader {
public static XmlObject parse(InputStream jiois, SchemaType type, XmlOptions options) throws XmlException, IOException {
try {
Document doc = DocumentHelper.readDocument(jiois);
- return getTypeLoader().parse(doc.getDocumentElement(), type, getXmlOptions(options));
+ return getTypeLoader(type).parse(doc.getDocumentElement(), type, getXmlOptions(options));
} catch (SAXException e) {
throw new IOException("Unable to parse xml bean", e);
}
}
public static XmlObject parse(XMLStreamReader xsr, SchemaType type, XmlOptions options) throws XmlException {
- return getTypeLoader().parse(xsr, type, getXmlOptions(options));
+ return getTypeLoader(type).parse(xsr, type, getXmlOptions(options));
}
public static XmlObject parse(Reader jior, SchemaType type, XmlOptions options) throws XmlException, IOException {
try {
Document doc = DocumentHelper.readDocument(new InputSource(jior));
- return getTypeLoader().parse(doc.getDocumentElement(), type, getXmlOptions(options));
+ return getTypeLoader(type).parse(doc.getDocumentElement(), type, getXmlOptions(options));
} catch (SAXException e) {
throw new XmlException("Unable to parse xml bean", e);
}
}
public static XmlObject parse(Node node, SchemaType type, XmlOptions options) throws XmlException {
- return getTypeLoader().parse(node, type, getXmlOptions(options));
+ return getTypeLoader(type).parse(node, type, getXmlOptions(options));
}
public static XmlObject parse(XMLInputStream xis, SchemaType type, XmlOptions options) throws XmlException, XMLStreamException {
- return getTypeLoader().parse(xis, type, getXmlOptions(options));
+ return getTypeLoader(type).parse(xis, type, getXmlOptions(options));
}
public static XMLInputStream newValidatingXMLInputStream ( XMLInputStream xis, SchemaType type, XmlOptions options ) throws XmlException, XMLStreamException {
- return getTypeLoader().newValidatingXMLInputStream(xis, type, getXmlOptions(options));
+ return getTypeLoader(type).newValidatingXMLInputStream(xis, type, getXmlOptions(options));
}
}