ws-commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Davanum Srinivas <dava...@gmail.com>
Subject Re: svn commit: r798240 - /webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/StAXDialectDetector.java
Date Mon, 27 Jul 2009 19:19:45 GMT
Andreas,

Can you please change the logging to debug? the stax implementation in websphere will always
end up showing this 
unnecessary warning

-- dims

On 07/27/2009 02:00 PM, veithen@apache.org wrote:
> Author: veithen
> Date: Mon Jul 27 18:00:30 2009
> New Revision: 798240
>
> URL: http://svn.apache.org/viewvc?rev=798240&view=rev
> Log:
> Some improvements of the StAX dialect detection:
> * Avoid NPE if the StAX implementation is part of the JRE (in which case getClassLoader
may return null).
> * Detect the StAX implementation on Sun's JRE 1.6.
> * Fixed another potential NPE when the manifest file doesn't have all expected attributes.
> * Added more logging to warn the user if the StAX implementation can't be detected.
>
> Modified:
>      webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/StAXDialectDetector.java
>
> Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/StAXDialectDetector.java
> URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/StAXDialectDetector.java?rev=798240&r1=798239&r2=798240&view=diff
> ==============================================================================
> --- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/StAXDialectDetector.java
(original)
> +++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/StAXDialectDetector.java
Mon Jul 27 18:00:30 2009
> @@ -53,6 +53,14 @@
>       private static final Attributes.Name IMPLEMENTATION_VERSION =
>               new Attributes.Name("Implementation-Version");
>
> +    /**
> +     * Map that stores detected dialects by location. The location is the URL corresponding
to the
> +     * root folder of the classpath entry from which the StAX implementation is loaded.
Note that
> +     * in the case of a JAR file, this is not the URL pointing to the JAR, but a<tt>jar:</tt>
> +     * URL that points to the root folder of the archive. The<code>null</code>
 location is used
> +     * to represent StAX implementations that are loaded from the bootstrap class loader,
i.e.
> +     * which are part of the JRE.
> +     */
>       private static final Map/*<URL,StAXDialect>*/ dialectByUrl =
>               Collections.synchronizedMap(new HashMap());
>
> @@ -119,15 +127,21 @@
>        * @return the detected dialect
>        */
>       public static StAXDialect getDialect(Class implementationClass) {
> -        URL rootUrl = getRootUrlForResource(implementationClass.getClassLoader(),
> -                implementationClass.getName().replace('.', '/') + ".class");
> -        if (rootUrl == null) {
> -            log.warn("Unable to determine location of StAX implementation containing
class "
> -                    + implementationClass.getName() + "; using default dialect");
> -            return UnknownStAXDialect.INSTANCE;
> +        URL rootUrl;
> +        ClassLoader classLoader = implementationClass.getClassLoader();
> +        if (classLoader == null) {
> +            // null means bootstrap classloader; represent this location as null
> +            rootUrl = null;
>           } else {
> -            return getDialect(rootUrl);
> +            rootUrl = getRootUrlForResource(classLoader,
> +                    implementationClass.getName().replace('.', '/') + ".class");
> +            if (rootUrl == null) {
> +                log.warn("Unable to determine location of StAX implementation containing
class "
> +                        + implementationClass.getName() + "; using default dialect");
> +                return UnknownStAXDialect.INSTANCE;
> +            }
>           }
> +        return getDialect(rootUrl);
>       }
>
>       private static StAXDialect getDialect(URL rootUrl) {
> @@ -142,6 +156,35 @@
>       }
>
>       private static StAXDialect detectDialect(URL rootUrl) {
> +        StAXDialect dialect;
> +        if (rootUrl == null) {
> +            dialect = detectDialectFromJRE();
> +        } else {
> +            dialect = detectDialectFromJar(rootUrl);
> +        }
> +        if (log.isInfoEnabled()) {
> +            log.info("Detected StAX dialect: " + dialect.getName());
> +        }
> +        return dialect;
> +    }
> +
> +    private static StAXDialect detectDialectFromJRE() {
> +        String vendor = System.getProperty("java.vendor");
> +        String version = System.getProperty("java.version");
> +        if (log.isDebugEnabled()) {
> +            log.debug("StAX implementation is part of the JRE:\n" +
> +                    "  Vendor:  " + vendor + "\n" +
> +                    "  Version: " + version);
> +        }
> +        if (vendor.startsWith("Sun") || vendor.startsWith("Apple")) {
> +            return SJSXPDialect.INSTANCE;
> +        } else {
> +            log.warn("Unable to determine dialect of StAX implementation provided by
the JRE");
> +            return UnknownStAXDialect.INSTANCE;
> +        }
> +    }
> +
> +    private static StAXDialect detectDialectFromJar(URL rootUrl) {
>           Manifest manifest;
>           try {
>               URL metaInfUrl = new URL(rootUrl, "META-INF/MANIFEST.MF");
> @@ -167,13 +210,14 @@
>           }
>           // For the moment, the dialect detection is quite simple, but in the future
we will probably
>           // have to differentiate by version number
> -        if(vendor != null) {
> -            if (vendor.toLowerCase().indexOf("woodstox") != -1) {
> -                return WoodstoxDialect.INSTANCE;
> -            } else if (title.indexOf("SJSXP") != -1) {
> -                return SJSXPDialect.INSTANCE;
> -            }
> +        if (vendor != null&&  vendor.toLowerCase().indexOf("woodstox") != -1)
{
> +            return WoodstoxDialect.INSTANCE;
> +        } else if (title != null&&  title.indexOf("SJSXP") != -1) {
> +            return SJSXPDialect.INSTANCE;
> +        } else {
> +            log.warn("Unable to determine dialect of the StAX implementation at " +
rootUrl
> +                    + " (using JAR manifest)");
> +            return UnknownStAXDialect.INSTANCE;
>           }
> -        return UnknownStAXDialect.INSTANCE;
>       }
>   }
>
>

Mime
View raw message