Forum Discussion

babusr01's avatar
babusr01
Contributor
8 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>

  • nmrao's avatar
    nmrao
    8 years ago

    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

8 Replies

  • nmrao's avatar
    nmrao
    Champion Level 3
    Not sure of the exact problem.

    Please specify what is the source of input and input data format?

    And what is the expected output?
    • babusr01's avatar
      babusr01
      Contributor

      In the below Groovy Script, I need to loop RequestElement element as per input,

      I am passing Account details to method and should create out with number Account for RequestElement.

       

      import groovy.xml.StreamingMarkupBuilder

      import groovy.xml.XmlUtil

      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");
      }
      RequestElement{
      accountnumber("84144135");
      }
      RequestElement{
      accountnumber("84023193");
      }
      }
      }
      }
      }
      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>