2013-08-28 5 views
5

Ich habe ein JAXB-Objekt, das ich gut entpacken kann. Allerdings, wenn ich ein Element [] Feld mit @XmlAnyElement kommentierte hinzufügen, wenn zu entpacken versucht, es wirft:Ungültige JAXP-API beim Abstellen von JAXB

java.lang.IllegalStateException: Sie sind mit ungültigen JAXP api oder Umsetzung läuft. JAXP api/Implementierung der Version 1.3.1 (in JDK6 enthalten) oder höher ist erforderlich. Für den Fall, dass Sie ant verwenden, stellen Sie sicher, dass amt 1.7.0 oder höher verwendet wird - ältere Versionen von ant enthalten JAXP api/impl Version 1.2 (in xml-apis.jar). Wenn Sie ältere ant-Versionen verwenden möchten, müssen Sie diese höher konfigurieren, um die JAXP api/impl-Versionen zu verwenden.

Dies wird von einem TestNG Test ausführen, die ich über die Eclipse-Plugin leite. Ich laufe mit dem 1.6 JDK und konfiguriere Maven, um alte Versionen des xml-apis Jar auszuschließen, aber ich kann nicht scheinen, dass es funktioniert. Ich gehe davon aus, dass ich immer noch inkompatible Versionen der Bibliotheken von irgendwo aufrufe, aber nicht weiß woher. direkt bekomme ich

über Eclipse-Lauf:

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

Wenn Sie außerhalb einer TestNG-Umgebung ausgeführt werden, funktioniert alles ordnungsgemäß? –

+0

Stapelverfolgung wurde hinzugefügt. – samblake

Antwort

12

Es sieht aus wie das Problem aufgrund einer alten Version von Xalan ist. Es scheint ein Minimum von Version 2.7.0 seit JDK 5 zu sein. Eine andere Bibliothek zog eine ältere Version ein, also habe ich das aus dem Maven-Build ausgeschlossen und alles sieht jetzt gut aus.

1

Zusätzlich/Unterstützung und um genauer zu sein, wenn Sie ein Maven oder JPA-Projekt ausführen, sollten Sie in der Lage sein, mit der rechten Maustaste auf das Abhängigkeitsverzeichnis, Abhängigkeit hinzufügen und suchen nach xalan. Fügen Sie unter der xalan: xalan-Liste alle Versionen 2.7.0 und höher hinzu.

4

In meinem Fall wurde es von der alten Version xercesImpl verursacht. Abhängigkeit unten fixiert es

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

Danke, das war frustrierend. Durch das Aktualisieren meiner Xerces-Abhängigkeit wurde mein Problem behoben! –

0

Ich lief in den gleichen Fehler mit den exakt gleichen Benennungen, aber es erwies sich als ein völlig anderes Problem als Abhängigkeitsproblem zu sein, wie der Fehler vorgeschlagen. Also teile ich meine Begegnung hier für den Fall, dass jemand da draußen auch davon profitieren könnte.

ich so etwas wie diese in meinem Code hatte:

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; 

    ... 
} 

Und in der Klasse Rectangle, ich hatte einen Tippfehler in Elementnamen für die @XmlRootElement angegeben - "retangle", nicht den Namen passende „Rechteck“ innerhalb des @XmlElementRef in der Imageobject Klasse:

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

    @XmlAttribute 
    private String colour; 

    @XmlAttribute 
    private String width; 

    ... 
} 

Also, achten Sie auf diese auch aus, wenn Sie die @XmlElementRef Annotation verwenden.

Verwandte Themen