2013-08-28 13 views
5

JAXBオブジェクトを持っていますが、非整列化できます。私は@XmlAnyElementでアノテート要素[]フィールドを追加する場合、非整列化しようとすると、しかし、それはスロー:アンマーシャリング時に無効なJAXP API JAXB

java.lang.IllegalStateException:あなたは無効なJAXP APIまたは実装で実行されています。 JAXP API /バージョン1.3.1(JDK6に含まれる)以上の実装が必要です。 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) 
+0

TestNG環境外で実行すると、すべて正常に動作しますか? –

+0

編集時にスタックトレースを追加しました。 – samblake

答えて

12

問題はXalanの古いバージョンが原因であるように見えます。 JDK 5以降、最低2.7.0のバージョンが必要になっているようです。別のライブラリが古いバージョンを使用していたので、Mavenビルドから除外しました。

1

追加/サポートしてより具体的には、mavenまたはJPAプロジェクトを実行している場合は、依存関係ディレクトリを右クリックして依存関係を追加し、xalanを検索することができます。 xalan:xalanリストの下に2.7.0以上のバージョンを追加してください。

4

私の場合、それはxercesImplの古いバージョンによって引き起こされました。

それを固定
<dependency> 
     <groupId>xerces</groupId> 
     <artifactId>xercesImpl</artifactId> 
     <version>2.11.0</version> 
</dependency> 
+0

ありがとう、これはイライラしていました。私のxerces依存性をアップグレードして、私の問題を修正しました! –

0

以下の依存関係は、私はまったく同じ文言と同じエラーに遭遇したが、エラーが提案のように、それは、依存関係の問題とは全く別の問題であることが判明しました。だから、そこにいる誰かが利益を得ることができるように、ここで私の出会いを共有しています。

が、私は私のコードでこれらのようなものを持っていた: - 「retangle」、名前と一致しない

public class ImageObject { 

    @XmlElementWrapper(name="shapes") 
    @XmlAnyElement(lax=true) 
    @XmlElementRefs({ 
    @XmlElementRef(name = "circle", type=Circle.class), 
    @XmlElementRef(name = "square", type=Square.class), 
    @XmlElementRef(name = "rectangle", type=Rectangle.class), 
    @XmlElementRef(name = "triangle", type=Triangle.class) 
    }) 
    private List<Object> shapes; 

    ... 
} 

そして、Rectangleクラスでは、私が@XmlRootElementに指定した要素名にタイプミスがありましたImageObjectクラスの@XmlElementRef内部の「四角形」:だから

@XmlRootElement(name = "retangle") 
public class Rectangle extends Shape { 

    @XmlAttribute 
    private String colour; 

    @XmlAttribute 
    private String width; 

    ... 
} 

、あなたは@XmlElementRefアノテーションを使用している場合は、あまりにもこのために気をつけてください。

関連する問題