Я хочу иметь локально размещенный веб-сервис, который возвращает список объектов UserContact в виде XML по запросу GET на URL http://localhost:8080/csvweb/contacts
У меня есть следующее сопоставление в URLMappings.groovy
"/contacts/$id"(controller: "contacts", parseRequest: true) {
action = [GET: "show", PUT: "update", DELETE: "delete", POST: "save"]
}
в контактах контактов контроллер действия определяется следующим образом
def show ={
if (params.id && UserContacts.exists(params.id.toLong())) {
def p = UserContacts.findById(params.id.toLong())
render p as XML
}
else {
def all = UserContacts.list()
render all as XML
}
}
Как мне запустить GET-запрос, используя HttpBuilder из Groovy консоли? У меня есть это до сих пор
@Grab( 'org.codehaus.groovy.modules.http-builder:http-builder:0.5.2-SNAPSHOT' )
import groovyx.net.http.*
import static groovyx.net.http.ContentType.*
import static groovyx.net.http.Method.GET
def http = new HTTPBuilder("http://localhost:8080/csvwebservice")
http.handler.failure = { resp, xml ->
println "it broke ${resp} ${xml}"
}
http.get(path: '/contacts') { resp, xml ->
if (resp.status == 200) {
xml?.items.each {UserContacts ->
println "${UserContacts?.email}"
}
} else {
return [error:"Did not return a proper response: ${resp.status}"]
}
}
Я всегда получаю эту ошибку
groovyx.net.http.HTTPBuilder parseResponse
WARNING: Could not parse content-type: Response does not have a content-type header
it broke groovyx.net.http.HttpResponseDecorator@62f6fb59
Редактировать: после добавления contentType: ContentType.xml я получаю следующее исключение:
29 февраля 2012 г. 14:07:45 groovyx.net.http.ParserRegistry getCharset
WARNING: Could not parse charset from content-type header in response
[Fatal Error] :-1:-1: Premature end of file.
Feb 29, 2012 2:07:45 PM groovyx.net.http.HTTPBuilder doRequest
WARNING: Error parsing 'null' response
org.codehaus.groovy.runtime.InvokerInvocationException: org.xml.sax.SAXParseException: Premature end of file.
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:95)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058)
.....
Edit2: ответ от веб-службы от веб-браузера
<list>
<userContacts id="1">
<company id="1"/>
<email>jonas.sultani@flintstones.com</email>
<fax>+49 6245 95535</fax>
<firstName>Jonas Sultani</firstName>
<lastName/>
<phone>+49 6245 99555</phone>
<prefix>Mr</prefix>
<title>Consultant</title>
</userContacts>
<userContacts id="2"><company id="2"/><email>james.simmons@airplanes.com</email><fax/><firstName>James H</firstName><lastName>Simmons</lastName><phone>+1 112-434-6684</phone><prefix>Mr</prefix><title>AP Lead</title>
</userContacts>
<userContacts id="3"><company id="3"/><email>slmarino@bowringer</email><fax/><firstName>Stephanie</firstName><lastName>Marino</lastName><phone>+1 650-544-5444</phone><prefix>Mrs</prefix><title>Project Manager</title>
</userContacts>
</list>