I'm calling a web service like this (using rest plugin):

withRest(uri: "http://server.com") {
    def response = post(path: '/webservice', query: [q: 'test'])
    // process response
}

and getting the following response:

<?xml version="1.0" encoding="UTF-8" ?>
<RESPONSE>
    <MULTIPLE>
        <SINGLE>
            <KEY name="id">
                <VALUE>1</VALUE>
            </KEY>
            <KEY name="courseid">
                <VALUE>1</VALUE>
            </KEY>
            <KEY name="name">
                <VALUE>test</VALUE>
            </KEY>
            <KEY name="description">
                <VALUE>Test</VALUE>
            </KEY>
            <KEY name="descriptionformat">
                <VALUE>1</VALUE>
            </KEY>
            <KEY name="enrolmentkey">
                <VALUE>TEST</VALUE>
            </KEY>
        </SINGLE>
    </MULTIPLE>
</RESPONSE>

I'd like to convert this response to an object so that I can do something like this:

assert responseMap.id == 1

The only way I know how to do this is use Gpath expressions in the // process request block above to grab individual entries and build my responseMap. Is there any easier way? Does this response follow some 'standard' and are there functions to make my job easier?

有帮助吗?

解决方案

You can just do:

new XmlSlurper().parseText( response )
                .MULTIPLE.SINGLE.KEY
                .find { it.@name == 'id' }
                .VALUE.text() == '1'

To check the VALUE of the KEY tag with name="id" is 1

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top