import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
import java.lang.Object;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.apache.commons.codec.binary.*;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.sap.aii.mapping.api.AbstractTransformation;
import com.sap.aii.mapping.api.DynamicConfiguration;
import com.sap.aii.mapping.api.DynamicConfigurationKey;
import com.sap.aii.mapping.api.InputAttachments;
import com.sap.aii.mapping.api.InputHeader;
import com.sap.aii.mapping.api.InputParameters;
import com.sap.aii.mapping.api.InputPayload;
import com.sap.aii.mapping.api.OutputAttachments;
import com.sap.aii.mapping.api.OutputHeader;
import com.sap.aii.mapping.api.OutputParameters;
import com.sap.aii.mapping.api.OutputPayload;
import com.sap.aii.mapping.api.StreamTransformationException;
import com.sap.aii.mapping.api.TransformationInput;
import com.sap.aii.mapping.api.TransformationOutput;
import com.sap.aii.mapping.lookup.Channel;
import com.sap.aii.mapping.lookup.LookupService;
import com.sap.aii.mapping.lookup.Payload;
import com.sap.aii.mapping.lookup.SystemAccessor;
import com.sap.aii.mapping.value.api.IFIdentifier;
import com.sap.aii.mapping.value.api.ValueMappingException;
import com.sap.aii.mapping.value.api.XIVMFactory;
import com.sap.aii.mapping.value.api.XIVMService;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
public class MarketoSOAPEnvelope extends AbstractTransformation {
String sessionId = "";
String SFDCserverUrl = "";
DynamicConfigurationKey KEY = DynamicConfigurationKey.create(
"http://sap.com/xi/XI/System/REST", "access_token");
DynamicConfigurationKey KEY1 = DynamicConfigurationKey.create(
"http://sap.com/xi/XI/System/REST", "serverUrl");
// DynamicConfiguration conf = argIn.getDynamicConfiguration();
String prefix = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:mkt=\"http://www.marketo.com/mktows/\">"
+ "<soapenv:Header> "
+ "<mkt:AuthenticationHeader>"
+ "<mktowsUserId>";
String suffix = "</mkt:AuthenticationHeader> </soapenv:Header> <soapenv:Body>";
String envelope = "</soapenv:Body> </soapenv:Envelope>";
// String sobject =
// "</urn:sObjects xsi:type=\"Account\" xmlns=\"urn:enterprise.soap.sforce.com\">";
/*
* Each JAVA Mapping using the 7.1 API will implement the method
* transform(TransformationInput arg0, TransformationOutput arg1) as opposed
* to execute(inputStream in, outputStream out) Method in earlier version.
*/
public void transform(TransformationInput arg0, TransformationOutput arg1)
throws StreamTransformationException {
/*
* An info message is added to trace. An instance of trace of object is
* obtained by calling the getTrace method of class
* AbstractTransformation
*/
// getTrace().addInfo("JAVA Mapping RemoveBodyTag is Initiated");
/*
* Input payload is obtained by using
* arg0.getInputPayload().getInputStream()
*/
String signature = "";
String marketoUserId = arg0.getInputParameters().getString("userID");
String marketoSecretKey = arg0.getInputParameters().getString("clientKey");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
String text = df.format(new Date());
String requestTimestamp = text.substring(0, 22) + ":" + text.substring(22);
System.out.println(requestTimestamp);
String encryptString = requestTimestamp + marketoUserId ;
System.out.println(encryptString);
SecretKeySpec secretKey = new SecretKeySpec(marketoSecretKey.getBytes(), "HmacSHA1");
try{
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(secretKey);
byte[] rawHmac = mac.doFinal(encryptString.getBytes());
// char[] hexChars = Hex.encodeHex(rawHmac);
// signature = rawHmac.toString();
StringBuilder sb = new StringBuilder();
for (byte b : rawHmac) {
sb.append(String.format("%02X", b));
}
//char[] hexChars = Hex.encodeHex(rawHmac);
//char[] hexChars = rawHmac.toString().toCharArray();
signature = sb.toString();//new String(rawHmac);
signature = signature.trim().toLowerCase();
}
catch(NoSuchAlgorithmException ex_1){
getTrace().addInfo("NoSuchAlgorithmException: failed");
}
catch(InvalidKeyException ex_2){
getTrace().addInfo("InvalidKeyException: failed");
}
String authHeader = marketoUserId + "</mktowsUserId>";
signature.replaceAll("\\s+","");
authHeader = authHeader + "<requestSignature>"
+ signature + "</requestSignature>"
+ "<requestTimestamp>" + requestTimestamp + "</requestTimestamp>";
String inputPayload = convertInputStreamToString(arg0.getInputPayload()
.getInputStream());
String outputPayload = "";
String temp = inputPayload;
outputPayload = prefix + authHeader + suffix + temp + envelope;
try {
/*
* Output payload is returned using the TransformationOutput class
* arg1.getOutputPayload().getOutputStream()
*/
arg1.getOutputPayload().getOutputStream().write(
outputPayload.getBytes("UTF-8"));
} catch (Exception exception1) {
}
}
public String convertInputStreamToString(InputStream in) {
StringBuffer sb = new StringBuffer();
try {
BufferedReader reader = new BufferedReader(
new InputStreamReader(in));
// System.out.println("Reading File line by line using BufferedReader");
String line = reader.readLine();
while (line != null) {
// System.out.println(line);
sb.append(line);
line = reader.readLine();
}
} catch (Exception ex) {
}
return sb.toString();
}
/* (non-Javadoc)
* @see java.lang.Object#clone()
*/
@Override
protected Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
return super.clone();
}
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
return super.equals(obj);
}
/* (non-Javadoc)
* @see java.lang.Object#finalize()
*/
@Override
protected void finalize() throws Throwable {
// TODO Auto-generated method stub
super.finalize();
}
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
// TODO Auto-generated method stub
return super.hashCode();
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
// TODO Auto-generated method stub
return super.toString();
}
/*
* ****************************************************************************
* The below Classes and Main method are implemented to help in the stand
* alone testing of the mapping program. You can delete the below when
* exporting and creating the imported archive in SAP PI.
* *******************
* *********************************************************
*/
// Implementation of the main method is for the stand alone testing of the
// mapping program
public static void main(String args[]) throws StreamTransformationException {
MarketoSOAPEnvelope object = new MarketoSOAPEnvelope();
try {
// String path = "C:\\";
// path = path.replace("\\", "/");
File file = new File("<path>");
System.out.println(file.getAbsolutePath());
InputStream in = new FileInputStream(file);
OutputStream out = new FileOutputStream(new File(
"<path>"));
InputPayloadImpl payloadInObj = new InputPayloadImpl(in);
TransformationInputImpl transformInObj = new TransformationInputImpl(
payloadInObj);
OutPayloadImpl payloadOutObj = new OutPayloadImpl(out);
TransformationOutputImpl transformOutObj = new TransformationOutputImpl(
payloadOutObj);
object.transform(transformInObj, transformOutObj);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/*
* The below classes (InputPayloadImpl, TransformationInputImpl, OutPayloadImpl,
* TransformationOutputImpl)are used to assist in the stand alone test
*/
class InputPayloadImpl extends InputPayload {
InputStream in;
public InputPayloadImpl(InputStream in) {
this.in = in;
}
@Override
public InputStream getInputStream() {
return in;
}
}
class TransformationInputImpl extends TransformationInput {
InputPayload payload;
public TransformationInputImpl(InputPayload payload) {
this.payload = payload;
}
@Override
public InputAttachments getInputAttachments() {
// TODO Auto-generated method stub
return null;
}
@Override
public InputHeader getInputHeader() {
// TODO Auto-generated method stub
return null;
}
@Override
public InputParameters getInputParameters() {
// TODO Auto-generated method stub
return null;
}
@Override
public InputPayload getInputPayload() {
return payload;
}
}
class OutPayloadImpl extends OutputPayload {
OutputStream ou;
public OutPayloadImpl(OutputStream ou) {
this.ou = ou;
}
@Override
public OutputStream getOutputStream() {
// TODO Auto-generated method stub
return ou;
}
}
class TransformationOutputImpl extends TransformationOutput {
OutputPayload payload;
public TransformationOutputImpl(OutputPayload payload) {
this.payload = payload;
}
@Override
public void copyInputAttachments() {
// TODO Auto-generated method stub
}
@Override
public OutputAttachments getOutputAttachments() {
// TODO Auto-generated method stub
return null;
}
@Override
public OutputHeader getOutputHeader() {
// TODO Auto-generated method stub
return null;
}
@Override
public OutputParameters getOutputParameters() {
// TODO Auto-generated method stub
return null;
}
@Override
public OutputPayload getOutputPayload() {
// TODO Auto-generated method stub
return payload;
}
}
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
8 | |
5 | |
5 | |
4 | |
4 | |
4 | |
4 | |
3 | |
3 | |
3 |