ws-commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andreas Veithen <andreas.veit...@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:27:44 GMT
Dims,

Because of the thread safety issue, it is important to show that
warning to the user. Since I have access to different WebSphere
environments (and also an IBM JDK on my Linux box), what I was going
to do is to improve the detection so that it is able to identify
XLXP-J. I guess that is OK for you IBM guys.

Andreas

On Mon, Jul 27, 2009 at 21:19, Davanum Srinivas<davanum@gmail.com> wrote:
> 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