मैंने निम्नलिखित xsd स्कीमा से जेएक्सबी कक्षाएं उत्पन्न की हैं:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="MeetUpData">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="SessionData">
<xs:complexType>
<xs:attribute name="Date" type="xs:string" use="required" />
<xs:attribute name="Quantity" type="xs:int" use="required" />
<xs:attribute name="Theme" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Name" type="xs:string" use="required" />
<xs:attribute name="Location" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:schema>
अब मैं निम्नलिखित XML दस्तावेज़ को अनमर्शल करने का प्रयास कर रहा हूँ:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<MeetUpData>
<location>3</location>
<name>2</name>
<sessionsData>
<date>345</date>
<quantity>3</quantity>
<theme>Windows</theme>
</sessionsData>
<sessionsData>
<date>3</date>
<quantity>7</quantity>
<theme>9</theme>
</sessionsData>
</MeetUpData>
कोड के निम्नलिखित भाग द्वारा:
JAXBContext jc = JAXBContext.newInstance(MeetUp.class);
Unmarshaller ums = jc.createUnmarshaller();
meetUpData = (MeetUpData) ums.unmarshal(new FileInputStream("src\\com\\bases\\java\\InitialXML.xml"));
System.out.println("Info: " + meetUpData.toString());
लेकिन मुझे त्रुटियों का एक गुच्छा मिलता है:
javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"MeetUpData"). Expected elements are (none)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:726)
....
समस्या क्या है?
2 जवाब
मुझे नहीं पता कि आपकी जावा कक्षाएं कैसी दिखती हैं, लेकिन त्रुटि संदेश से आपने रूट क्लास को @XMLRootElement के साथ एनोटेट नहीं किया।
मैंने मीटअपडाटा क्लास का उपयोग करके जेएक्सबी की तात्कालिकता बदल दी है, और इसे @XMLRootElement के साथ एनोटेट कर दिया है।
यहाँ कार्यात्मक स्रोत हैं
MeetUpData.class:
import java.io.Serializable;
import java.util.List;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class MeetUpData implements Serializable {
private static final long serialVersionUID = 1L;
String location;
String name;
List<SessionData> sessionsData;
public MeetUpData() {
super();
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<SessionData> getSessionsData() {
return sessionsData;
}
public void setSessionsData(List<SessionData> sessionsData) {
this.sessionsData = sessionsData;
}
@Override
public String toString() {
return "MeetUpData [location=" + location + ", name=" + name + ", sessionData=" + sessionsData + "]";
}
}
अनमार्शल करने के लिए कोड:
JAXBContext jc = JAXBContext.newInstance(MeetUpData.class);
Unmarshaller ums = jc.createUnmarshaller();
MeetUpData meetUpData = (MeetUpData) ums.unmarshal(new FileInputStream(
"src\\com\\bases\\java\\InitialXML.xml"));
System.out.println("Info: " + meetUpData.toString());
इसके अलावा, आपको अपने एक्सएमएल में "मीटअपडाटा" टैग को लोअर केस 'एम' से शुरू करने के लिए बदलना होगा, जैसे:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<meetUpData>
<location>3</location>
<name>2</name>
<sessionsData>
<date>345</date>
<quantity>3</quantity>
<theme>Windows</theme>
</sessionsData>
<sessionsData>
<date>3</date>
<quantity>7</quantity>
<theme>9</theme>
</sessionsData>
</meetUpData>
कृपया अपनी कक्षाएं प्रदान करें यदि यह आपके लिए काम नहीं करता है।
केवल अंतिम दो पंक्तियों का प्रयास करें:
meetUpData = (MeetUpData) ums.unmarshal(new FileInputStream("src\\com\\bases\\java\\InitialXML.xml"));
System.out.println("Info: " + meetUpData.toString());
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।