2012-02-28 11 views
0

Apache Commons Configurationライブラリの助けを借りてappleのplistファイルを解析しようとしています。私がJavaアプリケーションとして以下の例を試したところ、すべてうまく動作しましたが、Androidの同じコードは例外を投げています。Apache Commons Configuration Android上のPlistパーサ - 有効なSAXParser実装がありません

[OK]を、より多くの詳細は以下のコードを参照するために:

をこれは私のAndroidアプリのエントリポイントです:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    try { 
     Log.i("AC", "Hello"); 

     XMLPropertyListConfiguration plist = new XMLPropertyListConfiguration(); 
     plist.setFileName("assets/data.plist"); 
     plist.load(); 

     Object prop = plist.getProperty("Resorts"); 

     if(prop instanceof List) { 
      List<XMLPropertyListConfiguration> resorts = (List<XMLPropertyListConfiguration>) prop; 
      Log.i("AC",resorts.get(0).getClass().toString()); 
      Log.i("AC",resorts.get(1).getClass().toString()); 

      for(int i=0; i<resorts.size(); i++) { 
       String folder = (String) resorts.get(i).getProperty("Folder"); 
       List<XMLPropertyListConfiguration> courses = (List<XMLPropertyListConfiguration>) resorts.get(i).getProperty("Courses"); 

       Log.i("AC","Resort "+i+" in folder "+folder); 
       for(int j=0; j<courses.size(); j++) { 
        BigInteger course_index = (BigInteger) courses.get(j).getProperty("Index"); 
        String course_name = (String) courses.get(j).getProperty("Name"); 

        Log.i("AC","- Course "+course_index+": "+course_name); 
       } 
      } 
     } 

    } catch (ConfigurationException e) { 
     Log.e("AC","ConfigurationException"); 
     e.printStackTrace(); 
    } 
} 

、これは私が解析したいのplistである:で

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Resorts</key> 
    <array> 
     <dict> 
      <key>Courses</key> 
      <array> 
       <dict> 
        <key>Index</key> 
        <integer>1</integer> 
        <key>Name</key> 
        <string>Black Stork International</string> 
       </dict> 
       <dict> 
        <key>Index</key> 
        <integer>2</integer> 
        <key>Name</key> 
        <string>Black Stork Panorama</string> 
       </dict> 
       <dict> 
        <key>Index</key> 
        <integer>3</integer> 
        <key>Name</key> 
        <string>Black Stork Village</string> 
       </dict> 
      </array> 
      <key>Folder</key> 
      <string>01</string> 
     </dict> 
    </array> 
</dict> 
</plist> 

ビルドパス外部ジャーを追加しました:

  • コモンズ・コンフィギュレーション-1.8.jar
  • コモンズ-のlang-2.6.jar

結果の例外:

02-28 18:23:52.531: W/System.err(795): org.apache.commons.configuration.ConfigurationException: Unable to parse the configuration file 
02-28 18:23:52.531: W/System.err(795): at org.apache.commons.configuration.plist.XMLPropertyListConfiguration.load(XMLPropertyListConfiguration.java:263) 
02-28 18:23:52.541: W/System.err(795): at org.apache.commons.configuration.AbstractHierarchicalFileConfiguration$FileConfigurationDelegate.load(AbstractHierarchicalFileConfiguration.java:565) 
02-28 18:23:52.541: W/System.err(795): at org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:395) 
02-28 18:23:52.541: W/System.err(795): at org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:361) 
02-28 18:23:52.551: W/System.err(795): at org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:324) 
02-28 18:23:52.551: W/System.err(795): at org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:261) 
02-28 18:23:52.560: W/System.err(795): at org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:238) 
02-28 18:23:52.560: W/System.err(795): at org.apache.commons.configuration.AbstractHierarchicalFileConfiguration.load(AbstractHierarchicalFileConfiguration.java:184) 
02-28 18:23:52.560: W/System.err(795): at sk.datacrea.common.skuska2.CommonSkuska2Activity.onCreate(CommonSkuska2Activity.java:58) 
02-28 18:23:52.571: W/System.err(795): at android.app.Activity.performCreate(Activity.java:4465) 
02-28 18:23:52.571: W/System.err(795): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
02-28 18:23:52.571: W/System.err(795): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
02-28 18:23:52.582: W/System.err(795): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
02-28 18:23:52.582: W/System.err(795): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
02-28 18:23:52.582: W/System.err(795): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
02-28 18:23:52.592: W/System.err(795): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-28 18:23:52.592: W/System.err(795): at android.os.Looper.loop(Looper.java:137) 
02-28 18:23:52.592: W/System.err(795): at android.app.ActivityThread.main(ActivityThread.java:4424) 
02-28 18:23:52.601: W/System.err(795): at java.lang.reflect.Method.invokeNative(Native Method) 
02-28 18:23:52.601: W/System.err(795): at java.lang.reflect.Method.invoke(Method.java:511) 
02-28 18:23:52.601: W/System.err(795): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
02-28 18:23:52.601: W/System.err(795): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
02-28 18:23:52.601: W/System.err(795): at dalvik.system.NativeStart.main(Native Method) 
02-28 18:23:52.601: W/System.err(795): Caused by: javax.xml.parsers.ParserConfigurationException: No validating SAXParser implementation available 
02-28 18:23:52.625: W/System.err(795): at org.apache.harmony.xml.parsers.SAXParserFactoryImpl.newSAXParser(SAXParserFactoryImpl.java:75) 
02-28 18:23:52.625: W/System.err(795): at org.apache.commons.configuration.plist.XMLPropertyListConfiguration.load(XMLPropertyListConfiguration.java:256) 
02-28 18:23:52.625: W/System.err(795): ... 22 more 

希望私のための答えといくつかの教祖:)

+0

Devグループに見つかりました:http://groups.google.com/group/android-developers/browse_thread/thread/ec57ca3210fc645b?fwc=1 – dmon

+0

はい、前に読んでいましたが、私はsetValidating false)しかし、このメソッドが外部JARとして追加されたライブラリの一部であるXMLPropertyListConfiguration.classファイルで呼び出されたとき、どうすればよいでしょうか? – Matus

答えて

0

があること例外SaxparserファクトリがXMLPropertyListConfigurationファイルでtrueに設定されていることを確認したため、「有効なSaxparser実装が有効ではありません」という例外がありました。 私のプロジェクトのソースフォルダに新しいクラスXMLPropertyListConfiguration2を作成しました。これは、検証がfalseに変更されたことを除いて、外部JARのXMLPropertyListConfigurationクラスと同じです。

私のアクティビティのonCreateメソッドでは、XMLPropertyListConfigurationの代わりにこのクラスを使用しました。

関連する問題