Hi,

I'm wondering if WSSecEncrypt is ready for use. I was trying to encrypt
a very simple SOAP message with a bare minumum wss4j code using either
1.5.6 or 1.5.8. Using WSEncryptBody, it worked. But when I switch over
to WSSecEncrypt since WSEncryptBody seems to be deprecated, I got the
following exception:



org.apache.ws.security.WSSecurityException: Cannot encrypt data; nested
exception is: 
        org.apache.xml.security.exceptions.XMLSecurityException: Cannot
create a http://www.w3.org/2000/09/xmldsig#:ds:KeyInfo from a
http://www.w3.org/2000/09/xmldsig#:KeyInfo element
        at
org.apache.ws.security.message.WSSecEncrypt.doEncryption(WSSecEncrypt.ja
va:583)
        at
org.apache.ws.security.message.WSSecEncrypt.doEncryption(WSSecEncrypt.ja
va:444)
        at
org.apache.ws.security.message.WSSecEncrypt.encryptForInternalRef(WSSecE
ncrypt.java:342)
        at
org.apache.ws.security.message.WSSecEncrypt.build(WSSecEncrypt.java:306)
        at
com.ibm.sample.SOAPEncryption.encryptSOAPEnvelope(SOAPEncryption.java:13
7)
        at com.ibm.sample.SOAPEncryption.main(SOAPEncryption.java:159)
Caused by: org.apache.xml.security.exceptions.XMLSecurityException:
Cannot create a http://www.w3.org/2000/09/xmldsig#:ds:KeyInfo from a
http://www.w3.org/2000/09/xmldsig#:KeyInfo element
        at
org.apache.xml.security.utils.ElementCheckerImpl$InternedNsChecker.guara
nteeThatElementInCorrectSpace(Unknown Source)
        at
org.apache.xml.security.utils.ElementProxy.guaranteeThatElementInCorrect
Space(Unknown Source)
        at org.apache.xml.security.utils.ElementProxy.<init>(Unknown
Source)
        at
org.apache.xml.security.utils.SignatureElementProxy.<init>(Unknown
Source)
        at org.apache.xml.security.keys.KeyInfo.<init>(Unknown Source)
        at
org.apache.ws.security.message.WSSecEncrypt.doEncryption(WSSecEncrypt.ja
va:580)
        ... 5 more



Here's the relavent code segment:


        public SOAPMessage encryptSOAPEnvelope(SOAPEnvelope
unsignedEnvelope) throws Exception {
                // GY: Deprecated. Use WSSecEncrypt
//         WSEncryptBody wsEncrypt = new WSEncryptBody();
           WSSecEncrypt wsEncrypt = new WSSecEncrypt();
           Document doc = unsignedEnvelope.getOwnerDocument();
           
           String alias = "mykey"; 
           String password = "testit";
           wsEncrypt.setUserInfo(alias, password);

           Crypto crypto = CryptoFactory.getInstance();
//         Document encDoc = wsEncrypt.build(doc, crypto);
           Document encDoc = wsEncrypt.build(doc, crypto, null);
        
           DOMSource src = new DOMSource(encDoc);
           MessageFactory mf = MessageFactory.newInstance();
           SOAPMessage soapMsg = mf.createMessage();
           soapMsg.getSOAPPart().setContent(src);
        
           return soapMsg;
        }


I followed the WSSecEncrypt code to the point where it tries to clone
the KeyInfo when it generates the exception. It's at
WSSecEncrypt.java:595. This looks like all wss4j internal handling. Is
this a bug?

Thanks,
Gang

---------------------------------------------------------------------
To unsubscribe, e-mail: wss4j-dev-unsubscr...@ws.apache.org
For additional commands, e-mail: wss4j-dev-h...@ws.apache.org

Reply via email to