2017-03-16 11 views
0

私の仕事は、指定された複合型の任意の属性の(名前、デフォルト値)のペアを取り出すことです。XSAttributeUse.getValueConstraintValue()を使用するとApache Xercesがjava.lang.NoSuchMethodErrorをスローします

Exception in thread "main" java.lang.NoSuchMethodError: org/apache/xerces/xs/XSAttributeUse.getValueConstraintValue()Lorg/apache/xerces/xs/XSValue; (loaded from path\to\sdk\jre\lib\xml.jar by <Bootstrap Loader>) called from class my.package.xsd.XSDParser (loaded from file:/path/to/the/project/SwidSigner/target/classes/ by [email protected]). 
    at my.package.xsd.XSDParser.getTypeAttributes(XSDParser.java:54) 
    at my.package.xsd.XSDParser.getAttributes(XSDParser.java:37) 
    at my.package.Main.main(Main.java:29) 

何より、私はそれを変更する場合:

XSObjectList attrList = typeDefinition.getAttributeUses(); 
for (int i = 0; i < attrList.getLength(); i++) { 
    XSAttributeUse attributeUse = (XSAttributeUse) attrList.item(i); 
    XSAttributeDeclaration attributeDecl = attributeUse.getAttrDeclaration(); 

    if (!attributeUse.getRequired()) { 
     String name = attributeDecl.getValueConstraintValue().getNormalizedValue(); 
     String value = /* extracting the default value */; 
    } 
} 

それでもエラーが発生しますが、これはエラーを生成します

XSObjectList attrList = typeDefinition.getAttributeUses(); 
for (int i = 0; i < attrList.getLength(); i++) { 
    XSAttributeUse attributeUse = (XSAttributeUse) attrList.item(i); 

    if (!attributeUse.getRequired()) { 
     String name = attributeUse.getValueConstraintValue().getNormalizedValue(); 
     String value = /* extracting the default value */; 
    } 
} 

: は、私は次のコードを持っています代わりにXSAttributeDeclarationクラスについて不平を言います。

<dependency> 
    <groupId>xerces</groupId> 
    <artifactId>xercesImpl</artifactId> 
    <version>2.11.0</version> 
</dependency> 
+1

使用しているJavaのバージョンは?あなたのJREのlibディレクトリからXercesクラスをロードしようとしているようです。 – rmlan

+0

私はJava 8を使用しています。どうすればMavenからXercesクラスを読み込ませることができますか? –

答えて

1

あなたはそれでXercesのクラスと不正なjarファイルを持っています。このよう

XSComplexTypeDefinition.getAttributeUses() 

などの他の方法を使用して、私はXercesのをインポートするためにMavenを使用しているエラーはありません。

インストールされているJREのlibディレクトリを確認します。問題のクラスをxml.jarというジャーからロードしているようです。私が現在使っているJavaのインストール(LinuxとOSXの両方のJava 8)では、このジャーがどこから来たのか分かりません。

このjarファイルを削除(または移動)すると、問題が解決するはずです。これは、システム上の他のJavaプログラムに意図しない結果が生じる可能性があることに注意してください。

1

NoSuchMethodErrorは、実行時クラスパスに存在しないコンパイル時クラスパスに存在するコードが存在することを意味します。違いがないかどうかを確認してください。あなたのために "インポート"を生成するIDEを使用している場合は、使用していると思われるパッケージをインポートしていることを確認してください。

関連する問題