I was able to run the same code you sent successfully !

Please check whether you have the bouncy castle jar in the classpath?

Also please setup logging and check the error that is logged.

Thanks,
Ruchith

On 9/14/06, Xinjun Chen <[EMAIL PROTECTED]> wrote:

Hi,

I write some sample code to test signing a SOAP Envelope with UsernameToken
using WSS4J 1.5. The following is the sample code.
But this code produced the exception:

org.apache.ws.security.WSSecurityException: Signature
creation failed (Cannot setup signature data structure)
 at
org.apache.ws.security.message.WSSecSignature.prepare(WSSecSignature.java:323)
 at
org.apache.ws.security.message.WSSecSignature.build(WSSecSignature.java:643)
 at
tests.com.crimsonlogic.wsg.core.ws.security.TestUsernameTokenSignature.main(TestUsernameTokenSignature.java:87)

I debug the code and the error occurs at
WSSecSignature#prepare(Document doc, Crypto cr, WSSecHeader
secHeader).
The exact line is at:
   SignatureAlgorithm signatureAlgorithm = new SignatureAlgorithm(doc,
sigAlgo);

Could anyone provide some comment on this? Am I using WSS4J in the right
way?


Regards,
Xinjun


/************************************************************************************************************
Sample Code to Test Signature with UsernameToken
************************************************************************************************************/
 public static void main(String[] args) {
  // get sample SOAP Envelope
  org.apache.axis2.soap.SOAPEnvelope unsignedEnv =
Utils.getSampleSOAP11Envelope();


  org.w3c.dom.Document doc = null;
  try {
   doc =
Axis2Util.getDocumentFromSOAPEnvelope(unsignedEnv);
  } catch (Exception e1) {
   e1.printStackTrace();
  }
  String username = "TradeX";
  String password = "TradeX";

  WSSecUsernameToken ut = new WSSecUsernameToken();
        ut.setPasswordType(WSConstants.PASSWORD_DIGEST);
        ut.setUserInfo(username, password);
        ut.addCreated();
        ut.addNonce();
        ut.prepare(doc);

        WSSecSignature sign = new WSSecSignature();
        Vector signParts = new Vector();

        String name = "Body";
        String namespace =
"http://schemas.xmlsoap.org/soap/envelope/";;
        String encMod = "Content";
        WSEncryptionPart part = new WSEncryptionPart(name, namespace,
encMod);
        signParts.add(part);

        if(signParts.size() > 0) {
         sign.setParts(signParts);
        }

        sign.setUsernameToken(ut);
        sign.setKeyIdentifierType (WSConstants.UT_SIGNING);

sign.setSignatureAlgorithm(XMLSignature.ALGO_ID_MAC_HMAC_SHA1);

        String actor = "";
        boolean mustUnderstand = true;
        //WSSecHeader secHeader = new WSSecHeader(actor, mustUnderstand);
        WSSecHeader secHeader = new WSSecHeader();

        secHeader.insertSecurityHeader(doc);
        try {
            sign.build(doc, null, secHeader);
            System.out.println(new String(sign.getSignatureValue()));
        } catch (WSSecurityException e) {
         e.printStackTrace();
        }
        ut.prependToHeader(secHeader);

 }



--
www.ruchith.org

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to