org.codehaus.jackson.Karte.exc.UnrecognizedPropertyException: Unbekanntes Feld "Fehlermeldungen" (Klasse ReasonDTO), nicht gekennzeichnet als vernachlässigbar

Ich versuche, analysieren der zurückgegebenen JSON von einem REST-service-aufrufen wieder in den DTO-Objekt, so kann es auf der client-Seite. Der client-code sieht wie folgt aus:

@Test
public void retrieveAllReasonsUsingJSONandGet() throws Exception {
    List<Object> providers = new ArrayList<Object>();
    providers.add(new org.codehaus.jackson.jaxrs.JacksonJsonProvider());

    WebClient client = WebClient.create(endpointUrl + "/retrieveall", providers);

    Response r = client.accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON).get();
    assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());

    MappingJsonFactory factory = new MappingJsonFactory();
    JsonParser parser = factory.createJsonParser((InputStream)r.getEntity());
    TypeReference<List<ReasonDTO>> ref = new TypeReference<List<ReasonDTO>>() {} ;
    List<ReasonDTO> allReasons = (List<ReasonDTO>) parser.readValueAs(ref);

    assertEquals(43, allReasons.size());
} //retrieveAllReasonsUsingJSONandGet

Eine Strophe des zurückgegebenen JSON - (gibt es 43 davon) sieht so aus:

{
    "reasonCode": "...",
    "reason": "...",
    "hasError": false,
    "errorMessages": [],
    "hasWarning": false,
    "warningMessages": []
},

Den DTO-Objekt Aussehen (ignoriert die XML-Kram, denn die gleichen DTOs sind wieder vergangen mithilfe von JAX-WS, so müssen Sie umgewandelt werden/unmarshallt als XML zu):

public class ReasonDTO {
    private String reasonCode;
    private String reason;
    private boolean hasError = false;
    @XmlElementWrapper(name = "errorMessages")
    @XmlElement(name = "errorMessage")
    private List<String> errorMessages = new ArrayList<String>();
    private boolean hasWarning = false;
    @XmlElementWrapper(name = "warningMessages")
    @XmlElement(name = "warningMessage")
    private List<String> warningMessages = new ArrayList<String>();

Die volle Ausnahme, die immer geworfen ist:

org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "errorMessages" (Class ReasonDTO), not marked as ignorable
 at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@29b429b4; line: 1, column: 91] (through reference chain: ReasonDTO["errorMessages"])
    at org.codehaus.jackson.map.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:53)
    at org.codehaus.jackson.map.deser.StdDeserializationContext.unknownFieldException(StdDeserializationContext.java:248)
    at org.codehaus.jackson.map.deser.StdDeserializer.reportUnknownProperty(StdDeserializer.java:542)
    at org.codehaus.jackson.map.deser.StdDeserializer.handleUnknownProperty(StdDeserializer.java:528)
    at org.codehaus.jackson.map.deser.BeanDeserializer.handleUnknownProperty(BeanDeserializer.java:671)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:519)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:350)
    at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:116)
    at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:93)
    at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:25)
    at org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:1961)
    at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:852)
    at org.codehaus.jackson.JsonParser.readValueAs(JsonParser.java:1118)
    at TE_ReasonREST_ServiceTester.retrieveAllReasonsUsingJSONandPost(TE_ReasonREST_ServiceTester.java:73)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:600)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

Die Fehlermeldung scheint zu sagen, dass die "Fehlermeldungen" Feld nicht gefunden wird in der DTO, aber mir ist es. Die anderen posts habe ich gelesen über dieses empfehlen

@JsonIgnoreProperties

aber ich will nicht, ignorieren Sie die Fehlermeldung da, wenn einige vorhanden sind, die auf Probleme hinweisen.

Irgendwelche Gedanken, was mein problem sein könnte und wo ich suchen soll Lösungen?

Vielen Dank.

InformationsquelleAutor Garet Jax | 2014-03-30
Schreibe einen Kommentar