我从来都不喜欢这些重量级的服务器,比如Glassfish, Weblogic等,但是我不得不通过Glassfish提供的http服务来暴露一些端点来做一些实现。在一个特殊的情况下,我必须向Glassfish服务器发送一个Post请求,该请求接受gzip压缩的输入,解压缩并发送gzip压缩的响应。以下是目前为止的内容:
在Glassfish服务器上:
@Path("/")
class MyService extends BaseService {
@POST
@Path("/myService")
@Consumes(Array("application/json"))
@Produces(Array("application/json"))
@GZIP
def myService(@GZIP json: String): Response = {
println("Message received") // Not getting printed as well!!!
Response.status(200).header("Content-Encoding", "gzip").entity(JsonMarshall.deserialize(json)).build()
}
}
我使用JBoss rest easy API来暴露myService端点。在我的客户机中,我设置了必要的标头(代码片段如下所示)
post.addHeader("Content-Encoding", "gzip")
post.addHeader("Accept-Encoding", "gzip, deflate")
但是当我运行我的客户端时,下面是我看到的响应:
[main] INFO ServerPingTest - Calling URL http://localhost:8080/glassfish-server/myService
[main] INFO ServerPingTest - --- RESPONSE HEADERS ---
[main] INFO ServerPingTest - X-Powered-By: Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition 4.0 Java/Oracle Corporation/1.7)
[main] INFO ServerPingTest - Server: GlassFish Server Open Source Edition 4.0
[main] INFO ServerPingTest - Content-Language:
[main] INFO ServerPingTest - Content-Type: text/html
[main] INFO ServerPingTest - Date: Tue, 11 Mar 2014 16:39:17 GMT
[main] INFO ServerPingTest - Content-Length: 1217
[main] ERROR ServerPingTest - Error occurred when ping testing !!!!! Please see the stacktrace below!
java.util.zip.ZipException: Not in GZIP format
at java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:164)
at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:78)
at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:90)
......
......
这是我在服务器上看到的;
[#|2014-03-11T17:39:17.557+0100|SEVERE|glassfish 4.0||_ThreadID=21;_ThreadName=Thread-4;_TimeMillis=1394555957557;_LevelValue=1000;|
[http-listener-1(3)] WARN org.jboss.resteasy.core.SynchronousDispatcher - Failed executing POST /myService|#]
我也没有看到任何堆栈跟踪。有人能告诉我出了什么问题吗?
看起来我已经设法解决了这个问题。我做了以下操作:
-
使用最新版本的resteasy API(版本3.0.6.Final)而不是使用旧版本2.2.1(参见此文章http://sourceforge.net/p/resteasy/mailman/resteasy-developers/thread/BDED22DA-ACDC-47F5-9B14-30A202B52981@redhat.com/)
-
我在我的客户端(post)上添加了一个额外的标题。addHeader("内容类型"、"application/json"))
砰!