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);
私は私が何かをめちゃくちゃにしていますかなり確信しているが、私は正確にどこにいるのか分からない。ご協力いただきありがとうございます。