XML-данные POST с Groovy HTTPBuilder

Я пытаюсь отправить XML-данные POST в URL-адрес, используя класс HTTPBuilder. На данный момент у меня есть:

def http = new HTTPBuilder('http://m4m:[email protected]/api/orders/create')
http.request(POST, XML) {
body = {
        element1 {
            subelement 'value'
            subsubelement {
                key 'value2'
            }
        }
    }           

    response.success = { /* handle success*/ }
    response.failure = { resp, xml -> /* handle failure */ }
}

и после проверки я вижу, что запрос действительно выполняется с XML в качестве тела. У меня есть 3 проблемы с этим, хотя. Во-первых, в нем отсутствует классическая строка xml:

<?xml version="1.0" encoding="UTF-8"?>

который должен идти в верхней части тела, а во-вторых, тип содержимого не установлен на:

application/xml

Затем, наконец, для некоторых элементов в XML мне нужно установить атрибуты, например:

<element1 type="something">...</element1>

но я понятия не имею, как это сделать в формате выше. Кто-нибудь знает, как? Или может быть альтернативный способ?


person Nico Huysamen    schedule 13.06.2012    source источник


Ответы (1)


  1. Чтобы добавить строку декларации XML, вставьте mkp.xmlDeclaration()< /a> в начале вашей разметки.
  2. Передача ContentType.XML в качестве второго Параметр запроса устанавливает для заголовка Content-Type значение application/xml. Я не понимаю, почему это не работает для вас, но вы можете попробовать вместо этого использовать строку application/xml.
  3. Чтобы установить атрибуты элемента, используйте этот синтаксис в построителе разметки: element1(type: 'something') { ... }

Вот пример:

@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.5.2')
import groovyx.net.http.*

new HTTPBuilder('http://localhost:8080/').request(Method.POST, ContentType.XML) {
    body = { 
        mkp.xmlDeclaration()
        element(attr: 'value') {
            foo { 
                bar()
            } 
        }
    }
}

Результирующий HTTP-запрос выглядит следующим образом:

POST / HTTP/1.1
Accept: application/xml, text/xml, application/xhtml+xml, application/atom+xml
Content-Length: 71
Content-Type: application/xml
Host: localhost:8080
Connection: Keep-Alive
Accept-Encoding: gzip,deflate

<?xml version='1.0'?>
<element attr='value'><foo><bar/></foo></element>
person ataylor    schedule 13.06.2012
comment
Как распечатать запрос? - person Eric Francis; 08.06.2013