2013-08-28 12 views
5

Mam obiekt JAXB, który mogę usunąć przy pomocy efektu niezgrabnego. Jednakże, jeśli dodać element [] Pole uwagami z @XmlAnyElement, podczas próby unmarshal rzuca:Nieprawidłowy interfejs JAXP API podczas niemagania JAXB

java.lang.IllegalStateException: Używasz z nieprawidłowym API JAXP lub realizacji. Wymagane jest JAXP api/implementacja wersji 1.3.1 (zawarta w JDK6) lub wyższej. Jeśli używasz mrówki, upewnij się, że użyto mrówki 1.7.0 lub wyższej - starsze wersje mrówki zawierają JAXP api/impl w wersji 1.2 (w xml-apis.jar). Jeśli chcesz nadal używać starszych wersji ant, musisz go skonfigurować, aby używać wyższych wersji JAXP api/impl.

Jest to wykonywane z testu TestNG, który uruchamiam za pomocą wtyczki Eclipse. Używam wersji 1.6 JDK i skonfigurowałem program maven, aby wykluczyć stare wersje słoika xml-apis, ale wydaje mi się, że nie działa. Zakładam, że wciąż znajduję niekompatybilne wersje bibliotek skądś, ale nie wiem skąd.

Running poprzez Eclipse bezpośrednio uzyskać:

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

Jeśli działasz poza środowiskiem TestNG, czy wszystko działa poprawnie? –

+0

Dodano ślad stosu podczas edycji. – samblake

Odpowiedz

12

Wygląda na to, że problem jest ze względu na starej wersji Xalan. Wygląda na to, że od wersji JDK 5 potrzebna jest minimalna wersja 2.7.0. Inna biblioteka pobierała starszą wersję, więc wykluczyłem ją z wersji Mavena i teraz wszystko wygląda dobrze.

1

Dodatkowo/wsparcie i bardziej szczegółowe, jeśli prowadzisz projekt maven lub JPA, powinieneś kliknąć prawym przyciskiem myszy na katalog zależności, dodać zależności i wyszukać xalan. Dodaj wszystkie wersje 2.7.0 i nowsze pod listą xalan: xalan.

4

W moim przypadku było to spowodowane starą wersją xercesImpl. poniżej zależność stała ona

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

Dziękuję, to było frustrujące. Aktualizacja mojego uzależnienia od xerces poprawiła mój problem! –

0

wpadłem na ten sam błąd z dokładnie takich samych sformułowań, ale okazało się, że to zupełnie inny problem niż problemem uzależnienia jak błąd sugeruje. Więc dzielę się moim spotkaniem tutaj, na wypadek, gdyby ktoś tam mógł skorzystać.

miałem coś jak te w moim kodu:

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; 

    ... 
} 

I klasy Rectangle, miałem literówkę w nazwie elementu określonego dla @XmlRootElement - „retangle”, nie pasujący do nazwy „prostokąt” wewnątrz @XmlElementRef w klasie imageobject:

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

    @XmlAttribute 
    private String colour; 

    @XmlAttribute 
    private String width; 

    ... 
} 

Więc uważaj na to zbyt jeśli używasz adnotacji @XmlElementRef.

Powiązane problemy