Forum Discussion

babusr01's avatar
babusr01
Contributor
9 years ago
Solved

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>