2010-11-18 2 views
3

groovy를 처음 사용하고 일부 REST 서비스를 테스트하기 시작했습니다. 프롤로그에서 허용되지 않는 내용으로 인해 서비스에서 XML 응답을 구문 분석하는 데 문제가 있습니다. 잠시 검색 한 후에 처음에는 Byte Order Marker가있을 수 있다고하는 게시물을 보았습니다. 이를 보완하기 위해 첫 번째 문자 인 < 앞에 트림을 적용한 다음 응답을 구문 분석합니다. 이 작업이 진행되는 동안 응답은 'Transfer-Encoding : chunked'로 다시 돌아옵니다.HTTPBuilder/Groovy와 함께 'chunked'인코딩 된 응답 처리

HTTPBuilder를 사용하면 문자를 자르지 않고 청크 응답을 처리 할 수 ​​있습니까? 내가하려고하면 :

def http = new HTTPBuilder('url') 
http.request(Method.valueOf("GET"), XML) 

내가 프롤로그 메시지에서 허용하지 않는 '콘텐츠를 얻을. 그러나 :

http.request(Method.valueOf("GET"), TEXT)

작동하지만, XmlParser가에 대한 응답을 보내기 전에 먼저 < 때까지 텍스트를 트리밍이 필요합니다.

+0

불행하게도, 당신의 문제는 어느 쪽도 명확하게 표현되지도 (내게로) * 재현 *. [재현 가능한 단위 테스트 케이스] (http://svn.jremoting.codehaus.org/browse/~raw,r=831/gmod/httpbuilder/trunk/src/test/groovy/groovyx/net)를 게시하고 싶습니다. /http/HTTPBuilderTest.groovy). – robbbert

+0

가 나는 비슷한 문제가 오전 생각 : http://stackoverflow.com/questions/8760713/groovy-httpbuilder-getting-the-entity-content-from-a-gziped-chunked-response을 – serty2

답변

0

IIS 서버와 상호 작용해야 할 때 동일한 문제가있었습니다. 반환 된 XML은 웹 서버가 반환 한 실제 XML 앞에 가짜 문자가 있습니다. 나는 이것을 다음과 같이 해결했다.

StringReader reader = builder.get(path: 'rcserver/systeminfo.xml', contentType: ContentType.TEXT) 
def text = reader.getText() 
def xml = new XmlSlurper().parseText(text.substring(1)); 
+0

이것은 오래 전 이었지만, 결국 그렇게까지 끝났습니다! –

0

HTTPBuilder 클래스에는 응답의 content-type을 지정할 수있는 setContentEncoding() 메서드가 있습니다.

아마 같은 :이 도움이

http.contentEncoding = ContentEncoding.Type.GZIP 
http.request(Method.GET, XML) 

희망.

+0

또한 이 문제가있어 도움이되지 않습니다. –

0

나는이 문제를 https를 통해 IIS 서버에 부딪혔다. POST 요청에 대한 Wim Deblauwe의 답변에 약간의 추가 사항이 있습니다. 응답에서 기대하는 것보다 다른 유형을 요청에 보내야합니다.

XML을 요청 유형으로, TEXT를 응답 유형으로 보냅니다. 그런 다음 텍스트 응답을 XML로 구문 분석하십시오. 이것은 나를 위해 일했다. 그루비에서

:

def reader = http.request(Method.POST, ContentType.TEXT){ 
    uri.path = "myPath.api" 
    send ContentType.XML, postBodyXml 
} 
def text = reader.getText() 
def resultxml = new XmlSlurper().parseText(text.substring(1));