在Java Webstart上运行时,Jersey客户端无法正常工作

时间:2013-05-30 17:40:45

标签: java client jersey java-web-start

我有一台运行Jersey Rest webservices的Glassfish 3服务器。

我有一个作为客户端运行的swing应用程序。

我可以完成我编写应用程序的所有操作。 (添加,删除,编辑,查看)一切都按预期工作。

我想用Java Webstart分发swing应用程序。

在netbeans中,我使用webstart运行我的应用程序,并收到以下错误:

com.sun.jersey.api.client.ClientHandlerException: A message body reader for Java class       java.util.List, and Java type java.util.List<za.co.lunginstitute.restbeans.Patient>, and MIME media  type application/json was not found
    at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:561)
    at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:535)
    at za.co.lunginstitute.restclient.BaseDAO.get(BaseDAO.java:37)
    at za.co.lunginstitute.restclient.PatientsDAO.findAll(PatientsDAO.java:39)
    at     za.co.lunginstitute.gregg.xrays.gui.models.PatientDataModel.loadAll(PatientDataModel.java:37)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at za.co.lunginstitute.gregg.xrays.workers.BackgroundRunner$BGRunner.doInBackground(BackgroundRunner.java:97)
    at javax.swing.SwingWorker$1.call(Unknown Source)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at javax.swing.SwingWorker.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

我在JavaWS 6和7下运行它。我使用了JDK以及JRE。 只要我远离webstart,一切都会有效。

我尝试从命令行运行应用程序作为普通java,然后作为javaws运行。 Java可以工作,但是javaws给了我这个错误。

我确实检查了类路径,检查了双倍和三倍。所有的图书馆都存在。

我使用了fiddler,一切都按预期工作。建立连接,返回数据,然后返回此错误 - 仅在使用webstart时。

1 个答案:

答案 0 :(得分:0)

找到“解决方案”:

ClientConfig config = new DefaultClientConfig();
config.getClasses().add(JacksonJsonProvider.class);

我的代码中没有最后一行。添加后我不再得到例外了。

奇怪的是它运行app作为java.exe,但不是javaws.exe。

现在我在代码中得到了这个错误:

Caused by: org.codehaus.jackson.map.JsonMappingException: Can not construct instance of  java.util.Date from String value '1980-01-01 CAT': not a valid representation (error: Can not parse  date "1980-01-01 CAT": not compatible with any of standard forms ("yyyy-MM-dd'T'HH:mm:ss.SSSZ",  "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd"))
 at [Source:   com.sun.jersey.client.apache.ApacheHttpClientHandler$HttpClientResponseInputStream@140fbd9; line: 1,  column: 143] (through reference chain: za.co.lunginstitute.restbeans.Xray["xraydate"])
    at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
at org.codehaus.jackson.map.deser.StdDeserializationContext.weirdStringException(StdDeserializationContext.java:243)
at org.codehaus.jackson.map.deser.std.StdDeserializer._parseDate(StdDeserializer.java:553)
at org.codehaus.jackson.map.deser.std.DateDeserializer.deserialize(DateDeserializer.java:28)
at org.codehaus.jackson.map.deser.std.DateDeserializer.deserialize(DateDeserializer.java:19)
at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:299)
at org.codehaus.jackson.map.deser.SettableBeanProperty$MethodProperty.deserializeAndSet(SettableBeanProperty.java:414)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:697)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:217)
at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:194)
at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:30)
at org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:2695)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1308)
at org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:419)
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:565)
... 16 more

我确实使用了这个:

@XmlJavaTypeAdapter(SimpleDateAdapter.class)

关于类的get方法。再次,这在以java运行时有效,而不是在javaws中运行。

我错过了什么,一些泽西配置设置。