我有一台运行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时。
答案 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中运行。
我错过了什么,一些泽西配置设置。