Search code examples
xmlgroovyattributessoapuiaddition

How to add new attribute to header section in soapui using groovy script?


I need to add new attribute to header section. I have an example of soapui request

<request> <header timeout="?" subver="?"> <msgId>...</msgId> </header>

In header section there are two attributes: "timeout" and "subver" and I need add the new one i.e. "howToAddNewOne".

<header timeout="?" subver="?" howToAddNewOne="?">

**I will be very gratefull for solution in groovy :) ** I tried something like this but didn't work :(

getXML = new GroovyUtils(context) xmlRequest = getXML.getXmlHolder("req#Request") newAttr = xmlRequest.put('//header/@howToAddNewOne', 'value')


Solution

  • Using XmlSlurper and StreamingMarkupBuilder:

    import groovy.xml.StreamingMarkupBuilder
    
    def input = '''<request><header timeout="?" subver="?"><msgId></msgId></header></request>'''
    def request = new XmlSlurper().parseText(input)
    
    // add new attribute to <header> tag
    request.header.@howToAddNewOne = "?"
    
    // get the modified XML and check that it worked
    def outputBuilder = new StreamingMarkupBuilder()
    String updatedXml = outputBuilder.bind{ mkp.yield request }
    assert updatedXml.contains("howToAddNewOne")
    println(updatedXml)
    

    Output:

    <request><header howToAddNewOne='?' timeout='?' subver='?'><msgId></msgId></header></request>