2013-08-28 7 views
5

unmarshaling मेरे पास एक JAXB ऑब्जेक्ट है जो मैं unmarshal ठीक कर सकते हैं। हालांकि, अगर मैं एक तत्व [] क्षेत्र @XmlAnyElement साथ एनोटेट जोड़ने के लिए, जब unmarshal करने का प्रयास कर फेंक देता है:अमान्य जेएक्सपी एपीआई जब JAXB

java.lang.IllegalStateException: आपसे अमान्य JAXP एपीआई या कार्यान्वयन के साथ चल रहे हैं। जेएक्सपी एपीआई/संस्करण 1.3.1 (जेडीके 6 में शामिल) के कार्यान्वयन या उच्चतर की आवश्यकता है। यदि आप चींटी का उपयोग कर रहे हैं, तो सुनिश्चित करें कि चींटी 1.7.0 या उच्चतर का उपयोग किया जाता है - चींटी के पुराने संस्करणों में JAXP api/impl संस्करण 1.2 (xml-apis.jar में) होता है। यदि आप पुराने चींटी संस्करणों का उपयोग करना जारी रखना चाहते हैं, तो आपको इसे JAXP api/impl संस्करणों का उपयोग करने के लिए कॉन्फ़िगर करना होगा।

यह एक टेस्टएनजी परीक्षण से चलाया जाता है जिसे मैं ग्रहण प्लगइन के माध्यम से चला रहा हूं। मैं 1.6 जेडीके के साथ चल रहा हूं और एक्सएमएल-एपिस जार के पुराने संस्करणों को बाहर करने के लिए कॉन्फ़िगर किया गया मैवेन हालांकि मैं इसे काम नहीं कर पा रहा हूं। मुझे लगता है कि मैं अभी भी पुस्तकालयों के असंगत संस्करणों को कहीं से उठा रहा हूं लेकिन मुझे नहीं पता कि कहां से है।

ग्रहण के माध्यम से चल रहा है सीधे मुझे मिलता है:

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

यदि आप एक टेस्टएनजी पर्यावरण से बाहर भागते हैं तो सब ठीक से काम करता है? –

+0

संपादन में जोड़ा गया स्टैक ट्रेस। – samblake

उत्तर

12

ऐसा लगता है कि मुद्दा है Xalan के एक पुराने संस्करण की वजह से। ऐसा लगता है कि जेडीके 5 के बाद से न्यूनतम संस्करण 2.7.0 की आवश्यकता है। एक और लाइब्रेरी पुराने संस्करण में खींच रही थी, इसलिए मैंने इसे छोड़ दिया कि मेवेन बिल्ड से और सबकुछ अब अच्छा दिखता है।

1

इसके अलावा/समर्थन और अधिक विशिष्ट होने के लिए, यदि आप एक मेवेन या जेपीए प्रोजेक्ट चला रहे हैं तो आप निर्भरता निर्देशिका पर राइट क्लिक करने, निर्भरता जोड़ने और xalan के लिए खोज करने में सक्षम होना चाहिए। Xalan: xalan सूची के तहत किसी भी संस्करण 2.7.0 और ऊपर जोड़ें।

4

मेरे मामले में यह xercesImpl के पुराने संस्करण के कारण हुआ था। निर्भरता नीचे तय यह

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

धन्यवाद, यह निराशाजनक था। मेरी ज़ीरस निर्भरता को अपग्रेड करने से मेरी समस्या ठीक हो गई! –

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; 

    ... 
} 

और आयत कक्षा में, मैं तत्व नाम लिखने में कोई गलती @XmlRootElement के लिए निर्दिष्ट किया था "आयत" @XmlElementRef अंदर ImageObject कक्षा में:

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

    @XmlAttribute 
    private String colour; 

    @XmlAttribute 
    private String width; 

    ... 
} 

तो, बाहर इस बात के लिए भी अगर आप @XmlElementRef एनोटेशन का उपयोग कर रहे देखते हैं।