2016-04-05 14 views
0

HttpClientからJettyを使用するサーバーに、同じマシンでホストされているデータを送信しようとしています。以下は、私がエラーで取得し、完全なスタックトレースです:requestはHttpServletRequestのあるHttpClientからJettyにデータを送信する際に「GZIP形式ではありません」という例外があります

ServletInputStream bodyInputStream = request.getInputStream(); 
GZIPInputStream gis = new GZIPInputStream(bodyInputStream); 

java.util.zip.ZipException: Not in GZIP format 
    at java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:165) 
    at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:79) 
    at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:91) 
    at wserver.UploadHandler.handle(UploadHandler.java:44) 
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1162) 
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1096) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:213) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134) 
    at org.eclipse.jetty.server.Server.handle(Server.java:518) 
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:308) 
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:244) 
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273) 
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95) 
    at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93) 
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:246) 
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:156) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572) 
    at java.lang.Thread.run(Thread.java:745) 
2016-04-05 16:17:47.540:WARN:oejh.HttpParser:qtp1452126962-16: parse exception: java.lang.IllegalStateException: too much data seeking EOF in CLOSE for [email protected]{r=1,c=false,a=IDLE,uri=null} 

エラーがGZIPInputStreamオブジェクトをインスタンス化する行に、ここに発生します。

これは私がgzip圧縮するために私の文字列を圧縮する方法である:

public static byte[] gzip(String content) { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 

    try (GZIPOutputStream gzos = new GZIPOutputStream(baos)) { 
     gzos.write(content.getBytes(StandardCharsets.UTF_8)); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    return baos.toByteArray(); 
} 

そして、これは私がHttpClientを使用して送信する方法である:

byte[] result = Utils.gzip(pagesJson); 

HttpClient client = HttpClients.createDefault(); 
HttpPost httpPost = new HttpPost("http://" + serverHost + "/upload"); 

MultipartEntityBuilder builder = MultipartEntityBuilder.create(); 
builder.addBinaryBody("pages", result, ContentType.DEFAULT_BINARY, "pages.bin"); 
HttpEntity multipart = builder.build(); 
httpPost.addHeader(HTTP.CONTENT_ENCODING, "gzip"); 
httpPost.setEntity(multipart); 

HttpResponse response = client.execute(httpPost); 

私は私が何かをめちゃくちゃにしていますかなり確信しているが、私は正確にどこにいるのか分からない。ご協力いただきありがとうございます。

答えて

0

gzipのファイルを送信したいだけなら、ヘッダーを設定する必要はありません。あなたも、このために、マルチパートリクエストの世話をする必要があり、サーバー側で

httpPost.addHeader(HTTP.CONTENT_ENCODING, "gzip"); 

を使用でき Commons FileUpload

関連する問題