2017-04-20 12 views
1

codenameoneアプリケーションでJSONからPOJOへのマッピングにmirahを使用しようとしています。コードネーム1のMirahオブジェクトの逆シリアル化

public class Brand { 
    private String id; 
    private String name; 
    private String classification; 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getClassification() { 
     return classification; 
    } 

    public void setClassification(String classification) { 
     this.classification = classification; 
    }  
} 

は今、私はブランドのリストを持っているメッセージオブジェクト、でそれをラップしたい:私は、このクラスでは
{"id":"1","name":"foo","classification":"10"}
のような単純なJSONをマップするときにfinde作品

import java.util.List; 

public class Message { 
    public List<Brand> brands; 

    public List<Brand> getBrands() { 
     return brands; 
    } 

    public void setBrands(List<Brand> brands) { 
     this.brands = brands; 
    }   
} 
私はマッピングのために、このMirahのスクリプトを使用し

data_mapper Message:MessageMapper 
data_mapper Brand:BrandMapper 

shannahは012を説明したように。

私は自分のWebサービスを呼び出すマイコード:

MessageMapper scheduleMapper = new MessageMapper(); 
    DataMapper.createContext(Arrays.asList(
      scheduleMapper, 
      new BrandMapper() 
     ), new DataMapper.Decorator() { 

     public void decorate(DataMapper mapper) { 
      mapper.setReadKeyConversions(Arrays.asList(DataMapper.CONVERSION_NONE)); 
     } 
    }); 



    try { 
    Message message = scheduleMapper.readJSONFromURL("http://localhost/php-REST-DigitaleMusterplatte/api.php/brands", Message.class); 
     System.out.println(message); 
    } catch (IOException ex) { 
     Log.e(ex); 
    } 

これはJSONレスポンスです:
{"brands":[{"id":"1","name":"foo","classification":"10"},{"id":"2","name":"bar","classification":"20"}]}

私はこの例外を取得:

java.lang.RuntimeException: Failed to get key brands for class interface java.util.List because it was not a registered object type 
at ca.weblite.codename1.mapper.DataMapper.get(DataMapper.java:507) 
at com.mycompany.app.dmp.models.MessageMapper.readMap(/Volumes/Windows VMS/Documents/Shared/NetBeansProjects/mirah_macro_utils/MirahMacroUtils/src/ca/weblite/mirah/utils/DataMapperBuilder.mirah) 
at ca.weblite.codename1.mapper.DataMapper.readMap(DataMapper.java:719) 
at ca.weblite.codename1.mapper.DataMapper.readJSON(DataMapper.java:780) 
at ca.weblite.codename1.mapper.DataMapper.readJSON(DataMapper.java:792) 
at ca.weblite.codename1.mapper.DataMapper.readJSONFromConnection(DataMapper.java:767) 
at ca.weblite.codename1.mapper.DataMapper.readJSONFromURL(DataMapper.java:754) 
at com.mycompany.myapp.MyApplication.start(MyApplication.java:96) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at com.codename1.impl.javase.Executor$1$1.run(Executor.java:123) 
at com.codename1.ui.Display.processSerialCalls(Display.java:1152) 
at com.codename1.ui.Display.mainEDTLoop(Display.java:969) 
at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120) 
at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176) 

デモアプリケーションOSCONScheduler作品は良い。

答えて

1

これはバグのようです。ただし、publicの代わりにbrandsprivateに変更してみてください。あなたのアクセサ/可変文字を使用するか、public varを使用するかは、混乱している可能性があります。

+0

ありがとうございます。私的に変更しても問題ありません。 – chris

関連する問題