Difference between revisions of "Calling SOAP Web services"
From Toolsverse Knowledge Base
| Line 43: | Line 43: | ||
<vendorTimestamp>{requestTimestamp}</requestTimestamp> | <vendorTimestamp>{requestTimestamp}</requestTimestamp> | ||
</pre> | </pre> | ||
| + | |||
| + | Simple example below demonstrates how to set tokens, link source to the SOAP and point and transform result web service execution into the destination: | ||
| + | |||
| + | <syntaxhighlight lang="xml"> | ||
| + | <?xml version="1.0" encoding="UTF-8" ?> | ||
| + | <scenario> | ||
| + | <name>SOAP</name> | ||
| + | <script>soap</script> | ||
| + | <driver name="com.toolsverse.etl.driver.GenericFileDriver" /> | ||
| + | <beforetasks> | ||
| + | <task noconnection="true"> | ||
| + | <name>security</name> | ||
| + | <class>com.toolsverse.etl.core.task.common.ScriptTask</class> | ||
| + | <code> | ||
| + | <![CDATA[ | ||
| + | importPackage(java.text); | ||
| + | importPackage(java.util); | ||
| + | |||
| + | importPackage(javax.crypto); | ||
| + | importPackage(javax.crypto.spec); | ||
| + | |||
| + | importPackage(org.apache.commons.codec.binary); | ||
| + | |||
| + | importPackage(com.toolsverse.config); | ||
| + | |||
| + | var vendorUserId = SystemConfig.instance().getSystemProperty('requestUserId'); | ||
| + | var vendorSecretKey = SystemConfig.instance().getSystemProperty('vendorSecretKey'); | ||
| + | |||
| + | var df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); | ||
| + | var text = df.format(new java.util.Date()); | ||
| + | var requestTimestamp = text.substring(0, 22) + ":" + text.substring(22); | ||
| + | var encryptString = requestTimestamp + vendorUserId; | ||
| + | |||
| + | var secretKey = new SecretKeySpec(new java.lang.String(vendorSecretKey).getBytes(), "HmacSHA1"); | ||
| + | var mac = Mac.getInstance("HmacSHA1"); | ||
| + | mac.init(secretKey); | ||
| + | var rawHmac = mac.doFinal(new java.lang.String(encryptString).getBytes()); | ||
| + | var hexChars = Hex.encodeHex(rawHmac); | ||
| + | var signature = new java.lang.String(hexChars); | ||
| + | |||
| + | SystemConfig.instance().setSystemProperty('requestSignature', signature); | ||
| + | SystemConfig.instance().setSystemProperty('requestTimestamp', requestTimestamp); | ||
| + | SystemConfig.instance().setSystemProperty('requestUserId', vendorUserId); | ||
| + | ]]> | ||
| + | </code> | ||
| + | <variables> | ||
| + | <LANG value="JavaScript" /> | ||
| + | </variables> | ||
| + | </task> | ||
| + | </beforetasks> | ||
| + | <sources> | ||
| + | <source> | ||
| + | <name>cars</name> | ||
| + | </source> | ||
| + | </sources> | ||
| + | <destinations> | ||
| + | <destination > | ||
| + | <name>cars</name> | ||
| + | </destination> | ||
| + | </destinations> | ||
| + | </scenario> | ||
| + | </syntaxhighlight> | ||
Latest revision as of 00:28, 10 February 2015
The ETL Framework natively supports SOAP Web services over HTTP. You will need to:
- Set source or destination connection to the one linked to the SOAP endpoint
- Define SOAP request in the connection CDATA attribute
<connection alias="Cars"> <url>http://www.vendor.com/soapendpoint</url> <CDATA><![CDATA[<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.vendor.com/soapendpoint/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SOAP-ENV:Header> <ns1:AuthenticationHeader> <vendorUserId>{requestUserId}</mktowsUserId> <vendorSignature>{requestSignature}</requestSignature> <vendorTimestamp>{requestTimestamp}</requestTimestamp> </ns1:AuthenticationHeader> </SOAP-ENV:Header> <SOAP-ENV:Body> <ns1:paramsGetMultipleCars> <leadSelector xsi:type="ns1:KeySelector"> <keyType>MAKE</keyType> <keyValues> <stringItem>Ford</stringItem> <stringItem>Acura</stringItem> </keyValues> </leadSelector> <batchSize>100</batchSize> </ns1:paramsGetMultipleCars> </SOAP-ENV:Body> </SOAP-ENV:Envelope> ]]></CDATA> <params>method=post;exceptions=500;file=false;header_Content-Type=text/xml</params> <connector>com.toolsverse.etl.connector.xml.XmlObjectConnector</connector> <transport>com.toolsverse.io.HttpProcessor</transport> </connection>
You can tokenize any part of the CDATA or URL using {token}. In the example above there are 3 tokens:
<vendorUserId>{requestUserId}</mktowsUserId>
<vendorSignature>{requestSignature}</requestSignature>
<vendorTimestamp>{requestTimestamp}</requestTimestamp>
Simple example below demonstrates how to set tokens, link source to the SOAP and point and transform result web service execution into the destination:
<?xml version="1.0" encoding="UTF-8" ?> <scenario> <name>SOAP</name> <script>soap</script> <driver name="com.toolsverse.etl.driver.GenericFileDriver" /> <beforetasks> <task noconnection="true"> <name>security</name> <class>com.toolsverse.etl.core.task.common.ScriptTask</class> <code> <![CDATA[ importPackage(java.text); importPackage(java.util); importPackage(javax.crypto); importPackage(javax.crypto.spec); importPackage(org.apache.commons.codec.binary); importPackage(com.toolsverse.config); var vendorUserId = SystemConfig.instance().getSystemProperty('requestUserId'); var vendorSecretKey = SystemConfig.instance().getSystemProperty('vendorSecretKey'); var df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); var text = df.format(new java.util.Date()); var requestTimestamp = text.substring(0, 22) + ":" + text.substring(22); var encryptString = requestTimestamp + vendorUserId; var secretKey = new SecretKeySpec(new java.lang.String(vendorSecretKey).getBytes(), "HmacSHA1"); var mac = Mac.getInstance("HmacSHA1"); mac.init(secretKey); var rawHmac = mac.doFinal(new java.lang.String(encryptString).getBytes()); var hexChars = Hex.encodeHex(rawHmac); var signature = new java.lang.String(hexChars); SystemConfig.instance().setSystemProperty('requestSignature', signature); SystemConfig.instance().setSystemProperty('requestTimestamp', requestTimestamp); SystemConfig.instance().setSystemProperty('requestUserId', vendorUserId); ]]> </code> <variables> <LANG value="JavaScript" /> </variables> </task> </beforetasks> <sources> <source> <name>cars</name> </source> </sources> <destinations> <destination > <name>cars</name> </destination> </destinations> </scenario>