7

正常に非整列化できる JAXB オブジェクトがあります。ただし、@XmlAnyElement で注釈が付けられた Element[] フィールドを追加すると、アンマーシャリングしようとすると、次のようにスローされます。

java.lang.IllegalStateException: 無効な JAXP API または実装で実行しています。バージョン 1.3.1 (JDK6 に含まれる) 以降の JAXP api/実装が必要です。ant を使用している場合は、ant 1.7.0 以降が使用されていることを確認してください。古いバージョンの ant には、JAXP api/impl バージョン 1.2 (xml-apis.jar 内) が含まれています。古いバージョンの ant を使い続けたい場合は、より高い JAXP api/impl バージョンを使用するように構成する必要があります。

これは、Eclipse プラグインを介して実行している TestNG テストから実行されます。私は1.6 JDKで実行しており、古いバージョンのxml-apis jarを除外するようにmavenを構成していますが、動作していないようです。どこかからまだ互換性のないバージョンのライブラリを拾っていると思いますが、どこから来たのかわかりません。

Eclipse経由で直接実行すると、次のようになります。

29-Aug-2013 10:04:08 com.sun.xml.bind.v2.util.XmlFactory createTransformerFactory
SEVERE: null
java.lang.AbstractMethodError: javax.xml.transform.TransformerFactory.setFeature(Ljava/lang/String;Z)V
    at com.sun.xml.bind.v2.util.XmlFactory.createTransformerFactory(XmlFactory.java:155)
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.createTransformerHandler(JAXBContextImpl.java:747)
    at com.sun.xml.bind.v2.runtime.unmarshaller.DomLoader$State.<init>(DomLoader.java:75)
    at com.sun.xml.bind.v2.runtime.unmarshaller.DomLoader.startElement(DomLoader.java:118)
    at com.sun.xml.bind.v2.runtime.unmarshaller.ProxyLoader.startElement(ProxyLoader.java:60)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:501)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:480)
    at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:150)
    at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
    at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source)
    at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
    at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:218)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:190)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:184)
    at com.gtspt.vrs.parser.AbstractParserTest.unmarshal(AbstractParserTest.java:33)
    at com.gtspt.vrs.parser.AbstractParserTest.testParser(AbstractParserTest.java:26)
    at com.gtspt.vrs.parser.TestResultsParser.testParser(TestResultsParser.java:17)
    at com.gtspt.vrs.parser.Test.main(Test.java:16)
4

6 に答える 6

13

この問題は Xalan の古いバージョンが原因のようです。JDK 5 以降、最低でもバージョン 2.7.0 が必要なようです。別のライブラリが古いバージョンを取り込んでいたため、Maven ビルドからそれを除外したところ、すべて問題なく動作するようになりました。

于 2013-08-29T09:48:34.390 に答える
5

私の場合、古いバージョンのxercesImpl. 以下の依存関係はそれを修正しました

 <dependency>
      <groupId>xerces</groupId>
      <artifactId>xercesImpl</artifactId>
      <version>2.11.0</version>
 </dependency>
于 2015-09-21T15:22:52.047 に答える
1

さらに具体的に言うと、Maven または JPA プロジェクトを実行している場合は、依存関係のディレクトリを右クリックして依存関係を追加し、xalan を検索できるはずです。xalan:xalan リストの下にバージョン 2.7.0 以降を追加します。

于 2014-10-29T14:33:12.433 に答える