Hi Julio --
I suggest you don't use regex. My suggestion is that each of the elements is likely to be a fixed length. There will be elements that are part of a header, and elements that are part of the body. I do it like this for the request scriptable DPH:
///////////////////
import com.itko.util.Parameter;
String message = lisa_vse_request.getBodyText();
var args = lisa_vse_request.getArguments();
//the first 51 characters are the header. Everything else is the body
var header = message.substring(0,51);
var body = message.substring(51);
testExec.setStateValue("flRequestHeader",header);
testExec.setStateValue("flRequestBody",body);
private getElementValues(String section, String[] elementNames, int[] elementLength) {
int startPos = 0;
int endPos = startPos;
// testExec.setStateValue("SectionLength",section.length());
for(int i=0;i<elementNames.length;i++) {
endPos = startPos + elementLength[i];
// testExec.setStateValue("Counter",i);
// testExec.setStateValue("StartPos",startPos);
// testExec.setStateValue("ElementLength",elementLength[i]);
// testExec.setStateValue("EndPos",endPos);
String element = section.substring(startPos, endPos);
testExec.setStateValue("fl_"+elementNames[i],element);
startPos = endPos;
args.addParameter(new Parameter(elementNames[i],element));
}
return 0;
}
//
//Header
//
// This array contains the list of element names, and we will use those names as arguments
String[] elementNames = {
"APP_DATA_LEN",
"EXT_HDR_LEN",
"TRAN_CODE",
"SOURCE",
"DEST",
"ERROR"
};
// This array contains the length of each of the element values
int[] elementLength = {8,4,9,10,10,10};
getElementValues(header, elementNames, elementLength);
// This is what we will call the transaction
lisa_vse_request.setOperation(testExec.getStateValue("fl_TRAN_CODE"));
//
//Body
//
// This array contains the list of element names, and we will use those names as arguments
String[] elementNames = {
//All names deleted as they might contain client data
};
// This array contains the length of each of the element values
int[] elementLength = {
//All lengths deleted as they might contain client data
};
getElementValues(body, elementNames, elementLength);
///////////////////
There needs to be both a recording response scriptable DPH and a replay response DPH.
Recording:
///////////////////
import com.itko.util.Parameter;
var message = new String(lisa_vse_response.getBodyBytes());
var header = message.substring(0,51);
var body = message.substring(51);
testExec.setStateValue("flRequestHeader",header);
testExec.setStateValue("flRequestBody",body);
private getElementValues(String tagname, String section, String[] elementNames, int[] elementLength) {
int startPos = 0;
int endPos = startPos;
String myBody = "<"+tagname+">";
// testExec.setStateValue("SectionLength",section.length());
for(int i=0;i<elementNames.length;i++) {
endPos = startPos + elementLength[i];
// testExec.setStateValue("Counter",i);
// testExec.setStateValue("StartPos",startPos);
// testExec.setStateValue("ElementLength",elementLength[i]);
// testExec.setStateValue("EndPos",endPos);
String element = section.substring(startPos, endPos);
testExec.setStateValue("fl_"+elementNames[i],element);
startPos = endPos;
myBody = myBody+"<"+elementNames[i]+">"+element+"</"+elementNames[i]+">";
}
myBody = myBody+"</"+tagname+">";
return myBody;
}
//
//Header
//
String[] elementNames = {
"APP_DATA_LEN",
"EXT_HDR_LEN",
"TRAN_CODE",
"SOURCE",
"DEST",
"ERROR"
};
int[] elementLength = {8,4,9,10,10,10};
String xmlMessage = getElementValues("header", header, elementNames, elementLength);
//
//Body
//
String[] elementNames = {
//Removed names
};
int[] elementLength = {
//Removed lengths
};
xmlMessage = xmlMessage + getElementValues("body", body, elementNames, elementLength);
lisa_vse_response.setBodyText(xmlMessage);
return xmlMessage;
///////////////////
Replay:
///////////////////
String message = testExec.getStateString("lisa.vse.response","DEFAULT");
int finalpos = message.lastIndexOf("<");
int start = 0;
int startpos = 0;
int endpos = 0;
String myString = "";
do {
startpos = message.indexOf(">",start);
endpos = message.indexOf("<",startpos);
myString = myString + message.substring(startpos+1,endpos);
start = endpos;
testExec.setStateValue("string",myString);
} while(endpos < finalpos);
lisa_vse_response.setBodyText(myString);
return myString;
///////////////////
I haven't syntax-checked these DPHs since I removed all PII data, so you will need to validate and modify the routines as necessary.
Also, copy/paste sometimes runs double-quotes, so you want to check those.
Whitespace at the start of lines is also ruined by copy/paste, but I think I've manually indented the important bits.
Rick