Sean, can you confirm that this is only necessary with JDK prior to
Java 6? I got the same errors using 1.5, but when I tried this on
another machine with java 6 I got no such errors...
At least, it was my impression that xmlsec 1.4.1 will give you the
javax apis with any version of java, but the DOM provider is not there
by default except with java 6.
- ian.
On Feb 26, 2008, at 4:50 PM, Sean Mullan wrote:
Yes, you have not registered an XMLSignatureFactory provider
implementation.
The easiest workaround is to just instantiate and specify the service
provider implementation (bundled with Apache XMLSec) as a parameter as
follows:
XMLSignatureFactory factory = XMLSignatureFactory.getInstance("DOM",
new
org.jcp.xml.dsig.internal.dom.XMLDSigRI());
Alternatively, you can register the provider in the java.security
file,
or use the java.security.Provider API. See
http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html#ProviderInstalling
"Registering a Provider" for more details.
--Sean
Nayan Hajratwala wrote:
I'm trying to validate a signature using xmlsec 1.4.1 and am
getting the
following error:
javax.xml.crypto.NoSuchMechanismException: Mechanism type DOM not
available
at
javax.xml.crypto.dsig.XMLDSigSecurity.getEngineClassName(Unknown
Source)
at javax.xml.crypto.dsig.XMLDSigSecurity.getImpl(Unknown Source)
at javax.xml.crypto.dsig.XMLDSigSecurity.getImpl(Unknown Source)
at javax.xml.crypto.dsig.XMLSignatureFactory.findInstance
...
The code is:
NodeList nl =
doc.getElementsByTagNameNS(XMLSignature.XMLNS,
"Signature");
if (nl.getLength() == 0) {
throw new Exception("Cannot find Signature element");
}
DOMValidateContext valContext = new DOMValidateContext(pk,
nl.item(0));
XMLSignatureFactory factory =
XMLSignatureFactory.getInstance("DOM");
...
Any ideas?
---
Nayan Hajratwala
http://agileshrugged.com
http://chikli.com
734.658.6032