2010-11-18 3 views
3

groovyを初めて使用し、いくつかのRESTサービスをテストするために使い始めました。 「プロローグで許可されていないコンテンツ」のため、私のサービスからXML応答を解析する際に問題が発生しました。しばらくの検索の後、私は最初にバイトオーダーマーカーがあるかもしれないと言ってポストを見つけました。私は最初の<の前に文字をトリミングし、応答を解析するというアプローチに従っています。これがうまくいく間に、私はまた、応答が「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には、Webサーバーから返された実際の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クラスには、応答のコンテンツタイプを指定できるsetContentEncoding()メソッドがあります。

多分何かのように:

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

・ホープ、このことができます。

+0

私もこの問題があり、それは助けになりません。 –

0

この問題は、httpsでIISサーバーにも当てはまりました。 POST要求に対するWim Deblauweの答えに少し追加されています。リクエストでは、応答で期待するものとは異なるタイプを送信する必要があります。

要求タイプとしてXMLを、レスポンスタイプとしてTEXTを送信します。次に、テキスト応答をXMLに解析します。これは私のために働いた。 Groovyで

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)); 
関連する問題