-
Bug
-
Resolution: Fixed
-
P1
-
6
-
b98
-
sparc
-
solaris
Access Manager is using XML Security API (internal API) provided by Java Web Services Development pack since it's 6.0 release to support XML Signature and XML Encryption as part of supporting supporting standards (SAML and Project Liberty).
The JDK1.6 release now bundles XML Security API in it's rt.jar and promotes the usage of JSR105 and JSR106 for XML Signature and Encryption.
However, this makes the usage of internal API that's been used by the Access Manager throws Class loading issue. More accurately, it's failing in the registration of a XML Signature transformation class.
Snippet from Sean Mullan is as follows:
/***
Yes, that's the problem. The Apache Transform code uses Class.forName() which uses the current classloader and that is why you are getting a ClassNotFoundException. You did not see this problem prior to JDK 6 because the classloaders (of Transform and STRTransform) were the same.
***/
/home/ms109299/jdk1.6.0/bin/java -Xbootclasspath/p:/opt/SUNWam/lib/xmlsec.jar -classpath /home/ms109299/wss:/home/ms109299/am71/ns/userx/clientsdk/lib/amclientsdk.jar:/usr/share/lib/mps/secv1/jss4.jar:/opt/SUNWam/lib/servlet.jar:/usr/share/lib/jax-qname.jar:/opt/SUNWam/lib/jaxb-api.jar:/usr/share/lib/jaxb-impl.jar:/usr/share/lib/jaxb-xjc.jar:/usr/share/lib/saaj-api.jar:/usr/share/lib/saaj-impl.jar:/opt/SUNWam/locale:/opt/SUNWam/lib/ldapjdk.jar TestHandler
java.lang.ClassNotFoundException: com/sun/identity/wss/security/STRTransform
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at com.sun.org.apache.xml.internal.security.transforms.Transform.register(Unknown Source)
at com.sun.identity.wss.security.STRTransform.<clinit>(STRTransform.java:77)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at com.sun.identity.saml.xmlsig.AMSignatureProvider.class$(AMSignatureProvider.java:141)
at com.sun.identity.saml.xmlsig.AMSignatureProvider.<init>(AMSignatureProvider.java:140)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:506)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at com.sun.identity.saml.xmlsig.XMLSignatureManager.<init>(XMLSignatureManager.java:64)
at com.sun.identity.saml.xmlsig.XMLSignatureManager.getInstance(XMLSig
The JDK1.6 release now bundles XML Security API in it's rt.jar and promotes the usage of JSR105 and JSR106 for XML Signature and Encryption.
However, this makes the usage of internal API that's been used by the Access Manager throws Class loading issue. More accurately, it's failing in the registration of a XML Signature transformation class.
Snippet from Sean Mullan is as follows:
/***
Yes, that's the problem. The Apache Transform code uses Class.forName() which uses the current classloader and that is why you are getting a ClassNotFoundException. You did not see this problem prior to JDK 6 because the classloaders (of Transform and STRTransform) were the same.
***/
/home/ms109299/jdk1.6.0/bin/java -Xbootclasspath/p:/opt/SUNWam/lib/xmlsec.jar -classpath /home/ms109299/wss:/home/ms109299/am71/ns/userx/clientsdk/lib/amclientsdk.jar:/usr/share/lib/mps/secv1/jss4.jar:/opt/SUNWam/lib/servlet.jar:/usr/share/lib/jax-qname.jar:/opt/SUNWam/lib/jaxb-api.jar:/usr/share/lib/jaxb-impl.jar:/usr/share/lib/jaxb-xjc.jar:/usr/share/lib/saaj-api.jar:/usr/share/lib/saaj-impl.jar:/opt/SUNWam/locale:/opt/SUNWam/lib/ldapjdk.jar TestHandler
java.lang.ClassNotFoundException: com/sun/identity/wss/security/STRTransform
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at com.sun.org.apache.xml.internal.security.transforms.Transform.register(Unknown Source)
at com.sun.identity.wss.security.STRTransform.<clinit>(STRTransform.java:77)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at com.sun.identity.saml.xmlsig.AMSignatureProvider.class$(AMSignatureProvider.java:141)
at com.sun.identity.saml.xmlsig.AMSignatureProvider.<init>(AMSignatureProvider.java:140)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:506)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at com.sun.identity.saml.xmlsig.XMLSignatureManager.<init>(XMLSignatureManager.java:64)
at com.sun.identity.saml.xmlsig.XMLSignatureManager.getInstance(XMLSig