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 22:24:21 GMT
Andreas,

sounds good.

Anyone who needs a copy for websphere, Please feel free to download the latest WAS 7.0 for
developers [1]

thanks,
dims

[1] http://www.ibm.com/developerworks/downloads/ws/wasdevelopers/index.html

On 07/27/2009 03:27 PM, Andreas Veithen wrote:
> 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