Skip to content

Commit

Permalink
Add support for stax implementation in ibm jre
Browse files Browse the repository at this point in the history
git-svn-id: https://svn.apache.org/repos/asf/servicemix/smx4/specs/trunk@1226832 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information
gnodet committed Jan 3, 2012
1 parent 0425221 commit 678a684
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 8 deletions.
21 changes: 19 additions & 2 deletions stax-api-1.0/src/main/java/javax/xml/stream/FactoryLocator.java
Expand Up @@ -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;
Expand All @@ -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
Expand Down Expand Up @@ -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 {
Expand Down
Expand Up @@ -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);
Expand Down
Expand Up @@ -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)
Expand Down
Expand Up @@ -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)
Expand Down

0 comments on commit 678a684

Please sign in to comment.