2013-09-04 30 views
6

WorldWind APIを使用してアプリケーションを作成する作業が行われていて、APIを理解するために「HelloWorldWind」サンプルアプリケーションを実行しようとしました。私が行うとき、私は次のエラー・スタックを取得:例WorldWindアプリケーションの起動時にAbstractMethodErrorが発生する

public static DocumentBuilder createDocumentBuilder(boolean isNamespaceAware) 
{ 
    DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); 
    docBuilderFactory.setNamespaceAware(isNamespaceAware); 
    if (Configuration.getJavaVersion() >= 1.6) 
    { 
     try 
     { 
      docBuilderFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", 
       false); // Not getting past here 
     } 
     catch (ParserConfigurationException e) 
     { // Note it and continue on. Some Java5 parsers don't support the feature. 
      String message = Logging.getMessage("XML.NonvalidatingNotSupported"); 
      Logging.logger().finest(message); 
     } 
    } 
    ... 

Reading some stuff online、人々は私が64ビットシステム上で実行していることから、joglを非難している、しかし、次のように

Exception in thread "main" java.lang.AbstractMethodError: javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)V 
    at gov.nasa.worldwind.util.WWXML.createDocumentBuilder(WWXML.java:61) 
    at gov.nasa.worldwind.util.WWXML.openDocumentStream(WWXML.java:236) 
    at gov.nasa.worldwind.util.WWXML.openDocumentStream(WWXML.java:223) 
    at gov.nasa.worldwind.util.WWXML.openDocumentFile(WWXML.java:175) 
    at gov.nasa.worldwind.util.WWXML.openDocument(WWXML.java:148) 
    at gov.nasa.worldwind.Configuration.loadConfigDoc(Configuration.java:131) 
    at gov.nasa.worldwind.Configuration.<init>(Configuration.java:108) 
    at gov.nasa.worldwind.Configuration.<clinit>(Configuration.java:76) 
    at gov.nasa.worldwindx.examples.HelloWorldWind.main(HelloWorldWind.java: 

WWXML.createDocumentBuilderです私はすでにビルドパスに必要なジャーを持っています。 さらに、上記のURLをブラウザで試してみると404ページが返され、原因と思われるかもしれません。 URLは一部の環境設定を書式設定するための手段に過ぎません。私はDocumentBuilderFactory.setFeatureのソースを持っていないので、そこで何がうんざりしているのか分かりません。

私の問題は実際にはjoglなどですか?

答えて

10

これはある種のクラスパスの問題です。 AbstractMethodErrorは、JVMが抽象メソッドを呼び出そうとするとスローされます(これは許可されません)。 DocumentBuilderFactory.setFeature(String, boolean)はJavaSE 5のDocumentBuilderFactoryに追加された抽象メソッドであるため、J2SE 1.4.2バージョンに対してコンパイルされた実装はそのメソッドを持たず、setFeature(String, boolean)が呼び出されたときにこのエラーが発生します。

DocumetnBuilderFactory.newInstance()のインスタンスを返したクラスパス上に古いXMLライブラリがある可能性があります。この問題は、JOGL自体ではないかもしれません.JOGLが古いXMLライブラリを依存関係として持ち込んだだけかもしれません。

+0

:javaの上に完全な方法がある

docBuilderFactory.setNamespaceAware(true); 

docBuilderFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); 

で'DocumentBuilderFactory.newInstance()'から、それは 'DocumentBuilderFactoryImpl'です。 'setFeature'メソッドは明らかに実装されており、[this](http://grepcode.com/file/repo1.maven.org/maven2/xerces/xercesImpl/2.11.0/org/apache/xerces/jaxp/)によると、 DocumentBuilderFactoryImpl.java#DocumentBuilderFactoryImpl.setFeature%28java.lang.String%2Cboolean%29)、そこに 'AbstractMethodError'をスローするものはありません。 – MBraedley

+1

@MBraedleyロードされているxercesのバージョンを確認する必要があります。これを行うには、MyClass.class.getClassLoader()。getResource( "org/apache/xerces/jaxp/DocumentBuilderFactoryImpl.class");を呼び出し、結果のURLを出力します。関連するクラスを 'MyClass.class'に置き換えます。 'HelloWorldWind.class'はおそらく実行します。うまくいけば、URLで示されたjarファイルを調べて、それが何歳であるかを調べることができます。 – Dev

+0

使用されているjarはWorldWindバージョン2.5.0に付属しているものですので、おそらく動作するはずです。私はWorldWindフォーラムでこれが問題であるとの兆候は見られません。 – MBraedley

1

あなたはクラスWWXMLに行くと置き換える必要があります:私はちょうど返されるクラス型をチェックし

public static DocumentBuilder createDocumentBuilder(boolean isNamespaceAware) 
{ 
    DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); 

    docBuilderFactory.setNamespaceAware(isNamespaceAware); 

    if (Configuration.getJavaVersion() >= 1.6) 
    { 
     docBuilderFactory.setNamespaceAware(true); 
    } 

    try 
    { 
     return docBuilderFactory.newDocumentBuilder(); 
    } 
    catch (ParserConfigurationException e) 
    { 
     String message = Logging.getMessage("XML.ParserConfigurationException"); 
     Logging.logger().finest(message); 
     throw new WWRuntimeException(e); 
    } 
} 
関連する問題