Ich versuche, eine Spielzeuganwendung einzurichten (die sich irgendwann in eine echte Anwendung verwandeln kann). Ich stoße auf ein Problem mit Wink und Jackson. Ich habe zwei Anwendungen: einer läuft wink-server auf dem Steg und scheint mir ein paar JSON-Daten zu liefern; man läuft wink-client an jetty und erhält die jSON-daten ganz gut. Das Problem liegt in der automatischen Deserialisierung der JSON-Daten in meine Java-Bean.Wie registriere ich den Jackson-Anbieter mit dem Wink-Client?
Hier ist der Code, den ich in meinem Zwinkern Client-Aktion verwenden:
RestClient client = new RestClient();
Resource resource = client.resource("http://localhost:8081/helloworld");
User user = resource.accept(MediaType.APPLICATION_JSON).get(User.class);
Hier ist der Fehler, den ich erhalte, wenn ich versuche, die Struts Aktion auszuführen:
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)
...
Wenn ich die letzte Zeile ersetzen in das erste Code-Snippet mit der folgenden Zeile, alles funktioniert gut und Dandy.
String message = resource.accept(MediaType.APPLICATION_JSON).get(String.class);
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(message, User.class);
Es ist klar, dass die Daten über ganz gut bekommen, aber das Problem scheint darin zu liegen, dass die JacksonJsonProvider Klasse nicht mit Wink-Client registriert ist. Ich habe viele Möglichkeiten gesehen, den Provider mit dem Wink-Server zu registrieren, aber nicht mit dem Wink-Client.
Ist es möglich, dass das erste Code-Snippet ordnungsgemäß funktioniert? Wenn das so ist, wie?
(Nebenbei bemerkt, kann das andere Problem, dass ich auf meine Anmerkungen User-Klasse fehlt bin. Im Moment gibt keine sind. Vielleicht sind einige ich brauche ...)
Das ist nicht für mich zu arbeiten. Meine Klassen haben Jaxb-Annotationen und der Systemanwendungsanbieter scheint sich mit dem jackson-json-Provider zu befassen. Die Lösung bestand darin, setLoadWinkApplications (false) in der ClientConfig aufzurufen, bevor die Anwendungen festgelegt wurden. – kldavis4