XML文字列に従ってコンポーネントを動的にレンダリングする必要があるAndroidアプリを開発しています。このXML文字列はXSDに基づいており、サーバーから直接XMLを取得しています。JAXB xjcを使用して、XSDからオブジェクトモデルを作成しました。しかし今、私はJAXBを使用して完全なXMLをマーシャリング解除して解析できるようにしたいと考えています。私はここでいくつかの投稿を調べましたが、この投稿では、最後の解決策が再パッケージ化されたjaxbライブラリを使用するための解決策を提供する解決策を見つけました。私は次の手順に従いました:-
1.ライブラリをインポートします。activation.jaradditional.jarae-jaxb-2.2.5.jaristack-commons-runtime.jar jaxp-datatype.jar txw2-20110809.jar
jaxbインポートをae.jaxbに置き換えます。
RuntimeInlineAnnotationReader.cachePackageAnnotation(RenderXml.class.getPackage(), new XmlSchemaMine(""));
コードのonCreateメソッドに追加されました。ここで、RenderXmlは私のアクティビティの名前です。
まだ次のランタイムエラーが発生しています:-
12-04 13:44:39.820: E/AndroidRuntime(2219): FATAL EXCEPTION: main
12-04 13:44:39.820: E/AndroidRuntime(2219): java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlRegistry
12-04 13:44:39.820: E/AndroidRuntime(2219): at java.lang.Class.getDeclaredAnnotation(Native Method)
12-04 13:44:39.820: E/AndroidRuntime(2219): at java.lang.Class.getAnnotation(Class.java:260)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.com.sun.xml.bind.v2.model.annotation.RuntimeInlineAnnotationReader.getClassAnnotation(RuntimeInlineAnnotationReader.java:109)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.com.sun.xml.bind.v2.model.annotation.RuntimeInlineAnnotationReader.getClassAnnotation(RuntimeInlineAnnotationReader.java:59)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:330)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:461)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:299)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:142)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1164)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:146)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:237)
12-04 13:44:39.820: E/AndroidRuntime(2219): at java.lang.reflect.Method.invokeNative(Native Method)
12-04 13:44:39.820: E/AndroidRuntime(2219): at java.lang.reflect.Method.invoke(Method.java:511)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:186)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:146)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.javax.xml.bind.ContextFinder.find(ContextFinder.java:361)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:446)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:409)
12-04 13:44:39.820: E/AndroidRuntime(2219): at ae.javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:313)
12-04 13:44:39.820: E/AndroidRuntime(2219): at com.example.testuirenderxml.RenderXml.generateFirstMenu(RenderXml.java:79)
12-04 13:44:39.820: E/AndroidRuntime(2219): at com.example.testuirenderxml.RenderXml.onCreate(RenderXml.java:112)
12-04 13:44:39.820: E/AndroidRuntime(2219): at android.app.Activity.performCreate(Activity.java:5104)
12-04 13:44:39.820: E/AndroidRuntime(2219): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
12-04 13:44:39.820: E/AndroidRuntime(2219): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
12-04 13:44:39.820: E/AndroidRuntime(2219): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
12-04 13:44:39.820: E/AndroidRuntime(2219): at android.app.ActivityThread.access$600(ActivityThread.java:141)
12-04 13:44:39.820: E/AndroidRuntime(2219): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
12-04 13:44:39.820: E/AndroidRuntime(2219): at android.os.Handler.dispatchMessage(Handler.java:99)
12-04 13:44:39.820: E/AndroidRuntime(2219): at android.os.Looper.loop(Looper.java:137)
12-04 13:44:39.820: E/AndroidRuntime(2219): at android.app.ActivityThread.main(ActivityThread.java:5039)
12-04 13:44:39.820: E/AndroidRuntime(2219): at java.lang.reflect.Method.invokeNative(Native Method)
12-04 13:44:39.820: E/AndroidRuntime(2219): at java.lang.reflect.Method.invoke(Method.java:511)
12-04 13:44:39.820: E/AndroidRuntime(2219): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
12-04 13:44:39.820: E/AndroidRuntime(2219): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12-04 13:44:39.820: E/AndroidRuntime(2219): at dalvik.system.NativeStart.main(Native Method)
12-04 13:44:39.820: E/AndroidRuntime(2219): Caused by: java.lang.ClassNotFoundException: Didn't find class "javax.xml.bind.annotation.XmlRegistry" on path: /data/app/com.example.testuirenderxml-2.apk
12-04 13:44:39.820: E/AndroidRuntime(2219): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:65)
12-04 13:44:39.820: E/AndroidRuntime(2219): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
12-04 13:44:39.820: E/AndroidRuntime(2219): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
12-04 13:44:39.820: E/AndroidRuntime(2219): ... 35 more
定期的に更新されるxsdからオブジェクトモデルを生成する必要があるため、jaxbを使用する必要があります。オブジェクトモデルを作成し、このオブジェクトモデルを使用してxmlを解析して、次のことを実現する方法は他にありますか。したい?