Hello Ruchith and thanks for replying,

The problem is not that WSS4J is not working, it is functioning properly (at 
least until I restart the webapp).

The problem is that the rest of my Websphere server and other webapps is not.
It seems that fiddling with the default DOM settings for the whole JVM in 
runtime cause alot of instability, especially when that
DOM implementation is not available to the rest of the appserver (diff 
classloaders).

This is what I think happens and why it breaks my server:

When I call a webservice with security moduled engaged the default DOM impl 
gets changed to 

"org.apache.axis2.om.impl.dom.jaxp.DocumentBuilderFactoryImpl";
BUT the "org.apache.axis2.om.impl.dom.jaxp.DocumentBuilderFactoryImpl" class is 
only visible to the Axis2 webapp classloader.

This means that every other webapp residing on the server (and websphere 
itself) that requires a DOM
will fail with "Provider 
org.apache.axis2.om.impl.dom.jaxp.DocumentBuilderFactoryImpl not found"

If I try to bring up the Websphere admin console I get that exact error (the 
console has no knowledge about webapp classes).

I also cannot gracefully shutdown websphere (probably due to the same problem).

Good news that it is being changed to be thread local but I wonder if that is 
safe enough as threads could get reused/shared between webapps inside the 
application server.


Best Regards,

Johan Andersson

-----Original Message-----
From: "Ruchith Fernando" <[EMAIL PROTECTED]>
To: axis-user@ws.apache.org
Date: Thu, 23 Feb 2006 12:25:08 +0600
Subject: Re: [axis2] Problem with Websphere 6 and Axis2 security module

Hi,

RE: Problem #2:

>
> Caused by: java.lang.RuntimeException: Unable to create 
> nullNodejava.lang.NullPointerException
>         at 
> org.apache.xml.security.c14n.implementations.CanonicalizerBase.<clinit>(Unknown
>  Source)

The Axis2 security module contains the wss4j-SNAPSHOT.jar and the
xml-security.jar since its required by WSS4J. When WSS4J initializes
the xml-security library it will load the
org.apache.xml.security.c14n.implementations.CanonicalizerBase class.
At that point the following static block will be called.

  static {
    try {
        nullNode=DocumentBuilderFactory.newInstance().
            
newDocumentBuilder().newDocument().createAttributeNS(Constants.NamespaceSpecNS,XMLNS);
        nullNode.setValue("");
    } catch (Exception e) {
        throw new RuntimeException("Unable to create nullNode"/*,*/+e);
    }
  }

nullNode is an org.w3c.dom.Attr attribute.

Therefore as you can see it was not possible to create the nullNode.
Please check whether you can do the above within WebSphere.

The security module shipped with Axis2 0.94 will change the default
DOM impl of the VM to be DOOM (AXIOM complient DOM impl)... but this
works without a problem in Tomcat, Jetty and Axis2-SimpleHTTPServer.
I'm not sure whether changing the VM's DOM impl to DOOM caused any
problems inside WebSphere.
Right now the DOOM impl is changed to be able to set the DOM impl in a
ThreadLocal manner where the changed DOM impl will only be visible on
the thread that changed it not the whole VM. Therefore you can try the
SVN head as well.

Thanks,
Ruchith



Reply via email to