2017-09-06 18 views
0

AfterburnerModuleを有効にした後、ログに以下の警告メッセージが表示されます。 AfterburnerModuleがなければ、すべて正常に動作します。jackson AfterburnerModuleがログに警告を出します

Sep 06, 2017 9:11:39 AM com.fasterxml.jackson.module.afterburner.deser.BeanPropertyMutator _reportProblem 
WARNING: Disabling Afterburner deserialization for class com.test.Child (field #0; mutator com.test.Child$Access4JacksonDeserializerdc6e0fab), due to access error (type java.lang.IllegalAccessError, message=tried to access method com.test.test2.Parent.setSurname(Ljava/lang/String;)V from class com.test.Child$Access4JacksonDeserializerdc6e0fab) 

java.lang.IllegalAccessError: tried to access method com.test.test2.Parent.setSurname(Ljava/lang/String;)V from class com.test.Child$Access4JacksonDeserializerdc6e0fab 
    at com.test.Child$Access4JacksonDeserializerdc6e0fab.stringSetter(com/test/Child$Access4JacksonDeserializer.java) 
    at com.fasterxml.jackson.module.afterburner.deser.BeanPropertyMutator.stringSetter(BeanPropertyMutator.java:123) 
    at com.fasterxml.jackson.module.afterburner.deser.SettableStringMethodProperty.deserializeAndSet(SettableStringMethodProperty.java:60) 
    at com.fasterxml.jackson.module.afterburner.deser.SuperSonicBeanDeserializer.deserialize(SuperSonicBeanDeserializer.java:156) 
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3807) 
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2797) 
    at com.test.JacksonStuff.main(JacksonStuff.java:19) 

私のクラス次のとおりです。

package com.test.test2; 
import com.fasterxml.jackson.annotation.JsonProperty; 
public class Parent { 
    @JsonProperty("surname") 
    private String surname;  
    protected Parent() { 
    }  
    public Parent(String surname) { 
     this.surname = surname; 
    } 
    public String getSurname() { 
     return surname; 
    }  
    protected void setSurname(String surname) { 
     this.surname = surname; 
    }} 
    package com.test; 
    import com.fasterxml.jackson.annotation.JsonProperty; 
    import com.test.test2.Parent; 

public class Child extends Parent { 
    @JsonProperty("name") 
    private String test; 
    public Child() { 
     super(); 
    }  
    public Child(String var1) { 
     super(var1); 
    } 

    public String getTest() { 
     return test; 
    } 
    public void setTest(String test) { 
     this.test = test; 
    }} 

package com.test; 
import com.fasterxml.jackson.databind.ObjectMapper; 
import com.fasterxml.jackson.module.afterburner.AfterburnerModule; 
import java.io.IOException; 
public class JacksonStuff { 
    public static void main(String[] args) throws IOException { 
     ObjectMapper mapper = new ObjectMapper(); 
     AfterburnerModule module = new AfterburnerModule(); 
     mapper.registerModule(module); 
     String json = "{\"surname\":\"abc\"}"; 
     Child value = mapper.readValue(json, Child.class); 
    }} 

どのように私はログにこの警告を避けるのですか?私はそれが私のコントロール下ではなく第三者のlibからであるので、私はparent.javaを変更できません。

答えて

0

void setSurnameprotectedです。 publicに設定します。

+0

私が言及したように、Parent.javaは編集できません。これまでに私が見つけたいくつかの解決策:Child.javaとParent.javaは同じパッケージになければなりません。 Parent#setSurname()の可視性をprotectedからpublicに変更します。親#setSurname()に@JsonIgnoreアノテーションを追加します。 – anuj

関連する問題