Note that there are some explanatory texts on larger screens.

plurals
  1. POCreating SOAP message from Sample XML via Java
    text
    copied!<p>I am really struggling with this . I have a webservice to call which is secured by certificate and digital signature . All this needs to be passed as a part of SOAP request which I am creating via Java code , but even after spending days on it the digital signature part which I am trying to create is not getting formed properly .</p> <p>The code creates the request properly till BinaryToken and breaks from "Name signatureToken". Looking for guidance as to what is not right in the code</p> <p>This is the sample XML :</p> <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"&gt; &lt;SOAP-ENV:Header&gt; &lt;wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" SOAP-ENV:mustUnderstand="1"&gt; &lt;wsse:BinarySecurityToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="XWSSGID-1313056420712-845854837"&gt;MIIDVjCCAj6gAwIBAgIEThbQLTANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJnYjEQMA4GA1UECBMHVW5rbm93bjEQMA4GA1UEBxMHVW5rbm93bjEUMBIGA1UEChMLaGVhbHRoc29sdmUxFDASBgNVBAsTC2hlYWx0aHNvbHZlMQ4wDAYDVQQDEwVzaW1vbjAeFw0xMTA3MDgwOTM4NTNaFw0xMjA3MDIwOTM4NTNaMG0x&lt;/wsse:BinarySecurityToken&gt; &lt;ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="XWSSGID-13130564207092015610708"&gt; &lt;ds:SignedInfo&gt; &lt;ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"&gt; &lt;InclusiveNamespaces xmlns="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="wsse SOAP-ENV"/&gt; &lt;/ds:CanonicalizationMethod&gt; &lt;ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/&gt; &lt;ds:Reference URI="#XWSSGID-1313056421405-433059543"&gt; &lt;ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/&gt; &lt;ds:DigestValue&gt;3wCcYA8m7LN0TLchG80s6zUaTJE=&lt;/ds:DigestValue&gt; &lt;/ds:Reference&gt; &lt;/ds:SignedInfo&gt; &lt;ds:SignatureValue&gt;ZkPCKEGpOmkhJA5Kq6oqUYU3OWQYyca676UhL lOyRj7HQD7g0vS+wp70gY7Hos/2G7UpjmYDLPA==&lt;/ds:SignatureValue&gt; &lt;ds:KeyInfo&gt; &lt;wsse:SecurityTokenReference xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="XWSSGID-1313056421331317573418"&gt; &lt;wsse:Reference URI="#XWSSGID-1313056420712-845854837" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/&gt; &lt;/wsse:SecurityTokenReference&gt; &lt;/ds:KeyInfo&gt; &lt;/ds:Signature&gt; &lt;/wsse:Security&gt; &lt;/SOAP-ENV:Header&gt; &lt;SOAP-ENV:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="XWSSGID-1313056421405-433059543"&gt; &lt;/ns2:GetEhaStatusRequest&gt; &lt;/SOAP-ENV:Body&gt; &lt;/SOAP-ENV:Envelope&gt; </code></pre> <p>and the code which I have written to form the above XML via code is as :</p> <pre><code>protected void setSecuritySection(SOAPFactory soapFactory, SOAPEnvelope envelope, SOAPPart soapPart) throws SOAPException, ECException { String METHODNAME = "setSecuritySection"; KeyPairGenerator kpg; boolean mustUnderstand = true; SOAPHeader soapHeader = envelope.getHeader(); try { Name securityName = soapFactory.createName("Security", "wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wsswssecurity-secext-1.0.xsd"); SOAPElement securityElement = soapHeader.addHeaderElement(securityName); // SOAPHeaderElement securityElement = // soapHeader.addHeaderElement(securityName); // securityElement.setMustUnderstand(mustUnderstand); Name binarySecurityToken = soapFactory.createName("BinarySecurityToken", "wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wsswssecurity-secext-1.0.xsd"); SOAPElement binarySecurityTokenElement = securityElement.addChildElement(binarySecurityToken); Certificate cert; String trustStoreLocation = ServerInformation.getValueForWebsphereVariable("EHA_TRUSTSTORE"); String trustStorePwd = ServerInformation.getValueForWebsphereVariable("EHA_TRUSTSTORE_PWD"); InputStream path = new FileInputStream(trustStoreLocation); KeyStore ks = KeyStore.getInstance("JKS"); ks.load(path, new String(new BASE64Decoder().decodeBuffer(trustStorePwd)).toCharArray()); cert = ks.getCertificate("test"); binarySecurityTokenElement.addTextNode(new BASE64Encoder().encode(cert.getEncoded())); kpg = KeyPairGenerator.getInstance("DSA"); Name idToken = soapFactory.createName("Id", "wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wsswssecurity-secext-1.0.xsd"); SOAPElement idElement = binarySecurityTokenElement.addChildElement(idToken); idElement.addTextNode("test"); Name valueTypeToken = soapFactory.createName("ValueType", "wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"); SOAPElement valueTypeElement = binarySecurityTokenElement.addChildElement(valueTypeToken); valueTypeElement.addTextNode("X509v3"); Name encodingTypeToken = soapFactory.createName("EncodingType", "wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary"); SOAPElement encodingTypeElement = binarySecurityTokenElement.addChildElement(encodingTypeToken); encodingTypeElement.addTextNode("Base64Binary"); Name signatureToken = soapFactory.createName("Signature", "ds", "http://www.w3.org/2000/09/xmldsig#"); SOAPHeaderElement signElement = soapHeader.addHeaderElement(signatureToken); Name id1 = soapFactory.createName("Id"); signElement.addAttribute(id1,"XWSSGID-13130564207092015610708"); Name signedInfo = soapFactory.createName("SignedInfo"); SOAPElement signInfoElement = signElement.addChildElement(signedInfo); //SOAPHeaderElement signInfoElement = soapHeader.addHeaderElement(signedInfo); Name canonicalToken = soapFactory.createName("CanonicalizationMethod"); SOAPElement canonicalTokenTokenElement = signInfoElement.addChildElement(canonicalToken); Name alg = soapFactory.createName("Algorithm"); canonicalTokenTokenElement.addAttribute(alg,"http://www.w3.org/2001/10/xml-exc-c14n#"); Name InclusiveNamespaceToken = soapFactory.createName("InclusiveNamespaces", "wsse", "http://www.w3.org/2001/10/xml-exc-c14n#"); SOAPElement element = canonicalTokenTokenElement.addChildElement(InclusiveNamespaceToken); Name prefixList = soapFactory.createName("PrefixList"); element.addAttribute(prefixList,"wsse SOAP-ENV"); Name signatureMethodToken = soapFactory.createName("SignatureMethod","ds", "http://www.w3.org/2000/09/xmldsig#rsa-sha1"); SOAPElement signatureMethodTokenElement = signInfoElement.addChildElement(signatureMethodToken); Name alg2 = soapFactory.createName("Algorithm"); signatureMethodTokenElement.addAttribute(alg2,"http://www.w3.org/2000/09/xmldsig#rsa-sha1"); Name referenceToken = soapFactory.createName("Reference", "ds", "#XWSSGID-1313056421405-433059543"); SOAPElement referenceTokenElement = signatureMethodTokenElement.addChildElement(referenceToken); Name uri = soapFactory.createName("URI"); referenceTokenElement.addAttribute(uri,"#XWSSGID-1313056421405-433059543"); Name digestMethodAlgToken = soapFactory.createName("DigestMethod"); SOAPElement digestMethodAlgTokenElement = referenceTokenElement.addChildElement(digestMethodAlgToken); Name alg3 = soapFactory.createName("Algorithm"); digestMethodAlgTokenElement.addAttribute(alg3,"http://www.w3.org/2000/09/xmldsig#sha1"); Name digestValueToken = soapFactory.createName("DigestValue" ,"ds" , "3wCcYA8m7LN0TLchG80s6zUaTJE="); SOAPElement digestValueTokenElement = referenceTokenElement.addChildElement(digestValueToken); digestValueTokenElement.addTextNode("3wCcYA8m7LN0TLchG80s6zUaTJE="); Name signValueToken = soapFactory.createName("SignatureValue"); SOAPElement signValueElement = signElement.addChildElement(signValueToken); signValueElement.addTextNode("QlYfURFjcYPu41G31bXgP4JbFdg6kWH+8ofrY+oc22FvLqVMUW3zdtvZN=="); Name keyInfoToken = soapFactory.createName("KeyInfo") ; SOAPElement keyInfoElement = signElement.addChildElement(keyInfoToken); Name securityRefToken = soapFactory.createName("SecurityTokenReference" ,"wsse" , "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"); SOAPElement securityRefElement = keyInfoElement.addChildElement(securityRefToken); Name id2 = soapFactory.createName("Id","wsu","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"); securityRefElement.addAttribute(id2,"XWSSGID-1313056421331317573418"); Name referenceURIToken = soapFactory.createName("Reference", "wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-tokenprofile1.0#X509v3"); SOAPElement refElement = securityRefElement.addChildElement(referenceURIToken); Name uri1 = soapFactory.createName("URI"); refElement.addAttribute(uri1,"#XWSSGID-1313056420712-845854837"); Name valType = soapFactory.createName("ValueType"); refElement.addAttribute(valType,"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"); } catch (Exception ex) { throw new SOAPException(ex); } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload