Dynamic request creation with Groovy - element Create
As per my project, i have to create part of SOAP request as per input data,
I have developed below code and not able to get, could some one help me.
import groovy.xml.StreamingMarkupBuilder
import groovy.xml.XmlUtil
class DR{
//This Method is used to Create DRequestElement element as per request
def DRE(def accountdetails){
// change the account string to list
def acclist = accountdetails.tokenize(',');
def builder_acc = new StringBuilder()
for (item in acclist){
builder_acc.append("RequestElement{");
builder_acc.append( "accountnumber(")
builder_acc.append(item);
builder_acc.append( ")");
builder_acc.append( "}");
}
return builder_acc;
}
}
def createRequest(def accountNumbers){
//Define all your namespaces here
def nameSpacesMap = [
soapenv: 'http://schemas.xmlsoap.org/soap/envelope/',
ns: 'ABC',
]
def builder = new StreamingMarkupBuilder()
builder.encoding ='utf-8'
def soapRequest = builder.bind {
namespaces << nameSpacesMap
soapenv.Envelope {
soapenv.Header{}
soapenv.Body {
//example for element attribute
ns.TOPPER{
RequestHeader{
MessageId("ABC");
}
new DR().DRE(accountNumbers);
}
}
}
}
return XmlUtil.serialize(soapRequest);
}
def accountdetails = "84144135,84023193";
log.info createRequest(accountdetails);
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="ABC">
<soapenv:Header/>
<soapenv:Body>
<ns:TOPPER>
<RequestHeader>
<MessageId>ABC</MessageId>
</RequestHeader>
<RequestElement>
<accountnumber>84144135</accountnumber>
</RequestElement>
<RequestElement>
<accountnumber>84023193</accountnumber>
</RequestElement>
</ns:TOPPER>
</soapenv:Body>
</soapenv:Envelope>
Here is the script:
import groovy.xml.StreamingMarkupBuilder
import groovy.xml.XmlUtil
def createRequest = {accountNumbers ->
def nameSpacesMap = [
soapenv: 'http://schemas.xmlsoap.org/soap/envelope/',
ns: 'ABC',
]
def builder = new StreamingMarkupBuilder()
builder.encoding ='utf-8'
def soapRequest = builder.bind {
namespaces << nameSpacesMap
soapenv.Envelope {
soapenv.Header{}
soapenv.Body {
ns.TOPPER{
RequestHeader{
MessageId("ABC")
}
accountNumbers.each { actNo ->
RequestElement {
accountnumber(actNo)
}
}
}
}
}
}
XmlUtil.serialize(soapRequest)
}
def accountdetails = [84144135,84023193]
log.info createRequest(accountdetails)The same can be tried from here