我使用 jersey-client 来使用 REST 服务。我需要请求的实体和 Last-Modified 标头。
所以我做了以下事情:
ClientResponse response = webResource.get(ClientResponse.class);
Person person = response.getEntity(Person.class);
这样可行。我得到响应,我可以将实体(即 XML)编组到我的 POJO 中。当我调试并查看响应的标头时,我看到有一个 Last-Modified 标头集。
但是当我尝试通过检索日期时
response.getLastModified();
我在 URLConnectionClientHandler 的某个地方得到了一个 NPE。
有谁知道我做错了什么?
编辑:根据要求跟踪
java.lang.NullPointerException: null
at com.sun.jersey.api.client.ClientResponse.getLastModified(ClientResponse.java:647) ~[jersey-client-1.12.jar:1.12]
at a.o.u.user.dao.impl.uds.PersonenUdsClient.getPerson(PersonenUdsClient.java:103) ~[um-user-2.5.0-Beta1-SNAPSHOT.jar:na]
at a.o.u.user.dao.impl.UserDaoUdsImpl.mergeWithUdsUser(UserDaoUdsImpl.java:282) ~[um-user-2.5.0-Beta1-SNAPSHOT.jar:na]
at a.o.u.user.dao.impl.UserDaoUdsImpl.getUserWithEmail(UserDaoUdsImpl.java:124) ~[um-user-2.5.0-Beta1-SNAPSHOT.jar:na]
at ...
编辑:正如 npe 建议的那样,我深入研究了代码。我想我找到了问题所在。除了 jersey-client 之外,我在类路径中也有 cxf。jersey 和 cxf 都提供了一个名为RuntimeDelegateImpl的类。但是 CXFs 版本没有 DateHeaderDelegate。我认为 RuntimeDelegateImpl 的错误版本(CXF)被采用。
到目前为止,我还没有找到如何明确设置要使用的RuntimeDelegateImpl。