0

我有一个 Glassfish 3 服务器运行 Jersey Rest 网络服务。

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

我可以做我编写应用程序要做的所有事情。(添加、删除、编辑、查看)一切都按预期工作。

我想用 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 给了我这个错误。

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

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

4

1 回答 1

0

找到“解决方案”:

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

我的代码中没有最后一行。添加它后,我不再得到异常。

奇怪的是它可以将应用程序作为 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 中。

我错过了什么吗,一些 Jersey 配置设置。

于 2013-05-31T04:49:22.677 回答