読者です 読者をやめる 読者になる 読者になる

@thorikiriのてょりっき

@thorikiriがWebとかAndroidとかの技術ネタや本を読んだブログです

#slim3 でmodelToJsonするとNoClassDefFoundErrorになる

slim3 appengine

これは、slim3-1.0.15とAppEngine1.6.6を使った場合に発生します。
原因を調べたところ、AppEngine1.6.5だと、JsonObjectのパッケージがcom.google.appengine.repackaged.org.jsonであったのが、AppEngine1.6.6だとcom.google.appengine.labs.repackaged.org.jsonに変わっているからだと思う。
appengine-api-labs-1.6.X.jarが悪さをしているようですね。
急に動かなくなったのでびっくりしましたが、こういう理由だったのか。

java.lang.NoClassDefFoundError: com/google/appengine/repackaged/org/json/JSONObject
     at org.slim3.datastore.json.JsonWriter.writeString(JsonWriter.java:132)
     at org.slim3.datastore.json.Default.encode(Default.java:141)
     at rootpackage.meta.HogeMeta.modelToJson(SkillMeta.java:124)
     at org.slim3.datastore.ModelMeta.modelsToJson(ModelMeta.java:312)
     at org.slim3.datastore.ModelMeta.modelsToJson(ModelMeta.java:279)
     at rootpackage.controller.HogeController.doGet(SkillController.java:25)
     at rootpackage.controller.AbstractController.run(AbstractController.java:17)
     at org.slim3.controller.Controller.runBare(Controller.java:111)
     at org.slim3.controller.FrontController.processController(FrontController.java:491)
     at org.slim3.controller.FrontController.doFilter(FrontController.java:277)
     at org.slim3.controller.FrontController.doFilter(FrontController.java:237)
     at org.slim3.controller.FrontController.doFilter(FrontController.java:199)
     at org.slim3.tester.ControllerTester.start(ControllerTester.java:131)
     at rootpackage.controller.HogeControllerTest.キーで取得出来る(HogeControllerTest.java:35)

http://code.google.com/p/slim3/source/browse/trunk/#trunk%2Fslim3%2Fsrc%2Fmain%2Fjava%2Forg%2Fslim3%2Fdatastore%2Fjson%253Fstate%253Dclosed
この辺りのパッケージで使ってるので、ここらへんを修正すれば多分大丈夫なんだと思う。他に該当jarを使ってるのがどこにあるかは特に調べていない。