आप जिस व्यवहार को ढूंढ रहे हैं उसे प्राप्त करने के लिए आप ValidationEventHandler
का लाभ उठा सकते हैं। एक अप्रत्याशित तत्वों को एक चेतावनी के रूप में माना जाता है जिसे डिफ़ॉल्ट रूप से अनदेखा किया जाता है। अपने उपयोग के मामले का समर्थन करने के लिए आप ValdidationEventHandler
आपूर्ति कर सकते हैं जो चेतावनियों पर विफल रहता है (नीचे देखें)।
डेमो
package forum10721257;
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Dog.class);
File xml = new File("src/forum10721257/input.xml");
Unmarshaller unmarshaller = jc.createUnmarshaller();
unmarshaller.setEventHandler(new ValidationEventHandler() {
@Override
public boolean handleEvent(ValidationEvent event) {
return false;
}
});
Dog dog = (Dog) unmarshaller.unmarshal(xml);
}
}
JAXB आरआई अपवाद
Exception in thread "main" javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"id"). Expected elements are <{}name>
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:647)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:243)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:238)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:105)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.childElement(Loader.java:90)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.StructureLoader.childElement(StructureLoader.java:236)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:483)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:465)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:135)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:506)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:376)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2715)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:202)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:174)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:162)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:171)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:189)
at forum10721257.Demo.main(Demo.java:26)
EclipseLink JAXB (MOXY)
हमने हाल ही में MOXY को यह व्यवहार गयी। आपको EclipseLink 2.4.0 या 2.3.3 का उपयोग करने की आवश्यकता होगी। एक रात का निर्माण निम्न स्थान से प्राप्त किया जा सकता:
अद्यतन
मैं अपने प्रश्न से Dog
वर्ग बदलाव करने की जरूरत है। नीचे मैंने जो इस्तेमाल किया है।
कुत्ता
package forum10721257;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="Dog")
public class Dog {
private String name;
public String getName() {return name;}
public void setName(String name) {this.name = name;}
}
स्रोत
2012-05-23 17:39:14
मैं आप प्राप्त कर सकते है, तो JAXB का उपयोग कर कि पता नहीं है। हालांकि, यह एक्सस्ट्रीम का डिफ़ॉल्ट व्यवहार है। – tibtof
इकाई परीक्षण उद्देश्यों के लिए यह और अधिक है। मुझे शायद एक्सएमएलयूनीट का उपयोग करना होगा, एक्सएमएल को अनमर्शल करना होगा और उसके बाद इसे फिर से देखें और तुलना करें कि मैंने पहले क्या किया है। –