How to best inject username and password into SOAP envelope...Looking for tips on below code. Not working yet. Thanks!
<KeyValueMapOperations name="KVM_E_GetProperties" mapIdentifier="CIB_KVM_E"> <DisplayName>KVM_E_GetProperties</DisplayName> <Properties/> <ExclusiveCache>false</ExclusiveCache> <ExpiryTimeInSecs>300</ExpiryTimeInSecs> <Get assignTo="private.abs.v1.pmtusername"> <Key> <Parameter>cib.abs.v1.pmtusername</Parameter> </Key> </Get> <Get assignTo="private.abs.v1.pmtpassword"> <Key> <Parameter>cib.abs.v1.pmtpassword</Parameter> </Key> </Get> <Scope>environment</Scope> </KeyValueMapOperations>
2.XSL POLICY
<XSL async="false" continueOnError="false" enabled="true" name="XSLTransform_LoanInquiryReq"> <DisplayName>XSLTransform_LoanInquiryReq</DisplayName> <Properties/> <Source>sourceXmlContent</Source> <ResourceURL>xsl://Script-1.xslt</ResourceURL> <OutputVariable>LoanInquirySoapPayload</OutputVariable> <Parameter name="username" ref="private.abs.v1.pmtusername"/> <Parameter name="password" ref="private.abs.v1.pmtpassword"/> <Parameters ignoreUnresolvedVariables="true"/> </XSL>
3.XSLT
<xsl:param name="username"/> <xsl:param name="password"/> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="com.pnc.pmt.acbsService"> <soapenv:Header> <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <wsse:UsernameToken wsu:Id="UsernameToken-20" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <wsse:Username><xsl:value-of select="$username"/></wsse:Username> <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"><xsl:value-of select="$password"/></wsse:Password> </wsse:UsernameToken> </wsse:Security> </soapenv:Header>
Solved! Go to Solution.
I looked at your API Proxy... I have some feedback.
The XSL sheet should have xsl:param elements, and then you should reference those with xsl:value-of elements. It looks like this:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- declare parameters provided by the XSL policy --> <xsl:param name="pmtusername" select="''"/> <xsl:param name="pmtpassword" select="''"/> <!-- this element is optional --> <xsl:output method="xml" indent="yes" omit-xml-declaration="yes" version="1.0" encoding="UTF-8" /> <xsl:template match="/"> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="com.pnc.pmt.acbsService"> <soapenv:Header> <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <wsse:UsernameToken wsu:Id="UsernameToken-20" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <wsse:Username><xsl:value-of select="$pmtusername"/></wsse:Username> <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"><xsl:value-of select="$pmtpassword"/></wsse:Password> </wsse:UsernameToken> </wsse:Security> </soapenv:Header> <soapenv:Body> <soap:getLoanInquiryRequest> <soap:IdentifierType> <!--Optional:--> <soap:demo><xsl:value-of select="/Root/demo"/></soap:demo> <soap:appID><xsl:value-of select="/Root/appID"/></soap:appID> <soap:messageID><xsl:value-of select="/Root/messageID"/></soap:messageID> </soap:IdentifierType> <soap:search><xsl:value-of select="/Root/search"/></soap:search> <!--Optional:--> <soap:queryType><xsl:value-of select="/Root/queryType"/></soap:queryType> <!--Optional:--> <soap:obligorNumber><xsl:value-of select="/Root/obligorNumber"/></soap:obligorNumber> <!--Optional:--> <soap:facilityNumber><xsl:value-of select="/Root/facilityNumber"/></soap:facilityNumber> <!--Optional:--> <soap:loanNumber><xsl:value-of select="/Root/loanNumber"/></soap:loanNumber> <!--Optional:--> <soap:dependency><xsl:value-of select="/Root/dependency"/></soap:dependency> <!--Optional:--> <soap:loans><xsl:value-of select="/Root/loans"/></soap:loans> </soap:getLoanInquiryRequest> </soapenv:Body> </soapenv:Envelope> </xsl:template> </xsl:stylesheet>
The corresponding XSL POLICY tells Apigee what values to place into the parameters. I think you want something like this:
<XSL name="XSLTransform_LoanInquiryReq"> <Source>sourceXmlContent</Source> <ResourceURL>xsl://Script-1.xslt</ResourceURL> <OutputVariable>LoanInquirySoapPayload</OutputVariable> <!-- provide parameters to the XSL sheet --> <Parameters ignoreUnresolvedVariables='false'> <Parameter name='pmtusername' ref='private.abs.v1.pmtusername'/> <Parameter name='pmtpassword' ref='private.abs.v1.pmtpassword'/> </Parameters> </XSL>
You can see there I am declaring parameters for the XSL sheet, with specific names, and then referring (ref=) to context variables to use as the source of the value for those parameters. According to my reading of your proxy, those values come from the KVM-Get you have that runs previously.
When I use this combination I get ... something reasonable on output
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="com.pnc.pmt.acbsService"> <soapenv:Header> <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="1"> <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="UsernameToken-20"> <wsse:Username>dino@example.com</wsse:Username> <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">Secret123</wsse:Password> </wsse:UsernameToken> </wsse:Security> </soapenv:Header> <soapenv:Body> <soap:getLoanInquiryRequest> <soap:IdentifierType> <soap:demo/> <soap:appID/> <soap:messageID/> </soap:IdentifierType> <soap:search/> <soap:queryType/> <soap:obligorNumber/> <soap:facilityNumber/> <soap:loanNumber/> <soap:dependency/> <soap:loans/> </soap:getLoanInquiryRequest> </soapenv:Body> </soapenv:Envelope>
User | Count |
---|---|
1 | |
1 | |
1 | |
1 | |
1 |