我正在嘗試設置一個玩具應用程序(可能有一天會轉向一個真實的應用程序)。我遇到了眨眼和傑克遜的問題。我有兩個應用程序:一個在碼頭上運行wink-server,似乎正在提供一些JSON數據;一個在jetty上運行wink-client並且收到JSON數據就好了。問題在於自動將JSON數據反序列化回Java bean。如何使用Wink客戶端註冊Jackson提供商?
下面是我在眨眼客戶機操作使用的代碼:
RestClient client = new RestClient();
Resource resource = client.resource("http://localhost:8081/helloworld");
User user = resource.accept(MediaType.APPLICATION_JSON).get(User.class);
這是我收到的錯誤,當我嘗試運行Struts動作:如果我替換最後一行
java.lang.RuntimeException: No javax.ws.rs.ext.MessageBodyReader found for type class my.package.structure.User and media type application/json. Verify that all entity providers are correctly registered.
org.apache.wink.client.internal.handlers.ClientResponseImpl.readEntity(ClientResponseImpl.java:123)
org.apache.wink.client.internal.handlers.ClientResponseImpl.getEntity(ClientResponseImpl.java:65)
org.apache.wink.client.internal.handlers.ClientResponseImpl.getEntity(ClientResponseImpl.java:52)
org.apache.wink.client.internal.ResourceImpl.invoke(ResourceImpl.java:186)
org.apache.wink.client.internal.ResourceImpl.get(ResourceImpl.java:294)
my.package.structure.action.HelloWorldAction.execute(HelloWorldAction.java:29)
...
第一個代碼片段與下面的行,一切工作正常和丹迪。
String message = resource.accept(MediaType.APPLICATION_JSON).get(String.class);
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(message, User.class);
很顯然,該數據在就好了獲得,但問題似乎在於與該JacksonJsonProvider類不與Wink客戶端註冊的事實。我已經看到很多用Wink服務器註冊提供者的方法,但不是Wink客戶端。
是否有可能使第一個代碼片段正常運行?如果是這樣,怎麼樣?
(順便說一句,另一個問題可能是我失蹤在我的User類的註釋。現在根本就沒有什麼。也許我需要一些......)
這並沒有爲我工作。我的類有jaxb註釋,系統應用程序提供者似乎干擾傑克遜json提供程序。解決方案是在設置應用程序之前在ClientConfig上調用setLoadWinkApplications(false)。 – kldavis4 2013-03-16 03:17:37