From 678a6845b18760d4a017670887fbd2f048df36c4 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Tue, 3 Jan 2012 15:42:53 +0000 Subject: [PATCH] Add support for stax implementation in ibm jre git-svn-id: https://svn.apache.org/repos/asf/servicemix/smx4/specs/trunk@1226832 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/javax/xml/stream/FactoryLocator.java | 21 +++++++++++++++++-- .../javax/xml/stream/XMLEventFactory.java | 7 +++++-- .../javax/xml/stream/XMLInputFactory.java | 7 +++++-- .../javax/xml/stream/XMLOutputFactory.java | 7 +++++-- 4 files changed, 34 insertions(+), 8 deletions(-) diff --git a/stax-api-1.0/src/main/java/javax/xml/stream/FactoryLocator.java b/stax-api-1.0/src/main/java/javax/xml/stream/FactoryLocator.java index 3fa4d9c..cd61b8d 100644 --- a/stax-api-1.0/src/main/java/javax/xml/stream/FactoryLocator.java +++ b/stax-api-1.0/src/main/java/javax/xml/stream/FactoryLocator.java @@ -20,6 +20,7 @@ import java.io.File; import java.io.FileInputStream; +import java.util.Arrays; import java.util.Properties; import java.io.BufferedReader; import java.io.InputStreamReader; @@ -46,13 +47,13 @@ static Object locate(String factoryId) throws FactoryConfigurationError { return locate(factoryId, null); } - static Object locate(String factoryId, String altClassName) + static Object locate(String factoryId, String[] altClassName) throws FactoryConfigurationError { return locate(factoryId, altClassName, Thread.currentThread().getContextClassLoader()); } - static Object locate(String factoryId, String altClassName, + static Object locate(String factoryId, String[] altClassName, ClassLoader classLoader) throws FactoryConfigurationError { try { // If we are deployed into an OSGi environment, leverage it @@ -120,6 +121,22 @@ static Object locate(String factoryId, String altClassName, return loadFactory(altClassName, classLoader); } + private static Object loadFactory(String[] classNames, ClassLoader classLoader) + throws FactoryConfigurationError { + for (String className : classNames) { + try { + Class factoryClass = classLoader == null ? Class.forName(className) + : classLoader.loadClass(className); + + return factoryClass.newInstance(); + } catch (Exception x) { + } + } + throw new FactoryConfigurationError("Requested factory " + + Arrays.asList(classNames).toString() + + " could not be instantiated"); + } + private static Object loadFactory(String className, ClassLoader classLoader) throws FactoryConfigurationError { try { diff --git a/stax-api-1.0/src/main/java/javax/xml/stream/XMLEventFactory.java b/stax-api-1.0/src/main/java/javax/xml/stream/XMLEventFactory.java index 9f0bd04..61ebacc 100644 --- a/stax-api-1.0/src/main/java/javax/xml/stream/XMLEventFactory.java +++ b/stax-api-1.0/src/main/java/javax/xml/stream/XMLEventFactory.java @@ -43,12 +43,15 @@ protected XMLEventFactory() { public static XMLEventFactory newInstance() throws FactoryConfigurationError { - return (XMLEventFactory)FactoryLocator.locate("javax.xml.stream.XMLEventFactory", "com.sun.xml.internal.stream.events.XMLEventFactoryImpl"); + return (XMLEventFactory)FactoryLocator.locate("javax.xml.stream.XMLEventFactory", + new String[] { "com.sun.xml.internal.stream.events.XMLEventFactoryImpl", "com.ibm.xml.xlxp.api.stax.XMLEventFactoryImpl" }); } public static XMLEventFactory newInstance(String factoryId, ClassLoader classLoader) throws FactoryConfigurationError { - return (XMLEventFactory)FactoryLocator.locate(factoryId, "com.sun.xml.internal.stream.events.XMLEventFactoryImpl", classLoader); + return (XMLEventFactory)FactoryLocator.locate(factoryId, + new String[] { "com.sun.xml.internal.stream.events.XMLEventFactoryImpl", "com.ibm.xml.xlxp.api.stax.XMLEventFactoryImpl" }, + classLoader); } public abstract void setLocation(Location location); diff --git a/stax-api-1.0/src/main/java/javax/xml/stream/XMLInputFactory.java b/stax-api-1.0/src/main/java/javax/xml/stream/XMLInputFactory.java index 335d91d..e0e123c 100644 --- a/stax-api-1.0/src/main/java/javax/xml/stream/XMLInputFactory.java +++ b/stax-api-1.0/src/main/java/javax/xml/stream/XMLInputFactory.java @@ -38,13 +38,16 @@ protected XMLInputFactory() { public static XMLInputFactory newInstance() throws FactoryConfigurationError { // We'll assume the XMLInputFactory from the RI as a backup. - return (XMLInputFactory)FactoryLocator.locate("javax.xml.stream.XMLInputFactory", "com.sun.xml.internal.stream.XMLInputFactoryImpl"); + return (XMLInputFactory)FactoryLocator.locate("javax.xml.stream.XMLInputFactory", + new String[] { "com.sun.xml.internal.stream.XMLInputFactoryImpl", "com.ibm.xml.xlxp.api.stax.XMLInputFactoryImpl" }); } public static XMLInputFactory newInstance(java.lang.String factoryId, java.lang.ClassLoader classLoader) throws FactoryConfigurationError { // We'll assume the XMLInputFactory from the RI as a backup. - return (XMLInputFactory)FactoryLocator.locate(factoryId, "com.sun.xml.internal.stream.XMLInputFactoryImpl", classLoader); + return (XMLInputFactory)FactoryLocator.locate(factoryId, + new String[] { "com.sun.xml.internal.stream.XMLInputFactoryImpl", "com.ibm.xml.xlxp.api.stax.XMLInputFactoryImpl" }, + classLoader); } public abstract XMLStreamReader createXMLStreamReader(java.io.Reader reader) diff --git a/stax-api-1.0/src/main/java/javax/xml/stream/XMLOutputFactory.java b/stax-api-1.0/src/main/java/javax/xml/stream/XMLOutputFactory.java index f7de49f..e8a27ff 100644 --- a/stax-api-1.0/src/main/java/javax/xml/stream/XMLOutputFactory.java +++ b/stax-api-1.0/src/main/java/javax/xml/stream/XMLOutputFactory.java @@ -26,12 +26,15 @@ protected XMLOutputFactory() { } public static XMLOutputFactory newInstance() throws FactoryConfigurationError { - return (XMLOutputFactory) FactoryLocator.locate("javax.xml.stream.XMLOutputFactory", "com.sun.xml.internal.stream.XMLOutputFactoryImpl"); + return (XMLOutputFactory) FactoryLocator.locate("javax.xml.stream.XMLOutputFactory", + new String[] { "com.sun.xml.internal.stream.XMLOutputFactoryImpl", "com.ibm.xml.xlxp.api.stax.XMLOutputFactoryImpl" }); } public static XMLInputFactory newInstance(String factoryId, java.lang.ClassLoader classLoader) throws FactoryConfigurationError { - return (XMLInputFactory) FactoryLocator.locate(factoryId, "com.sun.xml.internal.stream.XMLOutputFactoryImpl", classLoader); + return (XMLInputFactory) FactoryLocator.locate(factoryId, + new String[] { "com.sun.xml.internal.stream.XMLOutputFactoryImpl", "com.ibm.xml.xlxp.api.stax.XMLOutputFactoryImpl" }, + classLoader); } public abstract XMLStreamWriter createXMLStreamWriter(java.io.Writer stream)