我正在JAXB 2.0上工作,目前在驗證部分工作不正常。下面 是驗證碼JAXB 2.0驗證不起作用
public void validateXMLToSchema(Unmarshaller ummarshaller,String xsdFileName) throws SAXException, JAXBException{
System.out.println(getClass().getResource(DEFAULT_XSD_NAME).toString());
Schema schema;
SchemaFactory schemaFactory=SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
if(null==xsdFileName)
schema=schemaFactory.newSchema(getClass().getResource(DEFAULT_XSD_NAME));
else
schema=schemaFactory.newSchema(new File(xsdFileName));
ummarshaller.setSchema(schema);
ummarshaller.setEventHandler(new ValidationEventHandler() {
@Override
public boolean handleEvent(ValidationEvent validationevent) {
if(validationevent.getSeverity()==ValidationEvent.FATAL_ERROR || validationevent.getSeverity()==ValidationEvent.ERROR || validationevent.getSeverity()==ValidationEvent.WARNING){
ValidationEventLocator locator = validationevent.getLocator();
log.info("Line:Col[" + locator.getLineNumber()
+ ":" + locator.getColumnNumber()
+ "]:" + validationevent.getMessage());
}
return true;
}
});
}
,這裏是在調用方法
Destination destination=new Destination();
try {
destination=(Destination)unmarshal(Destination.class,new FileInputStream(new File("C:/Users/Raisonne/Desktop/jaxb/jaxb-ri-20101119/bin/destination.xml")));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (JAXBException e) {
e.printStackTrace();
}
System.out.println(destination.getName());
}
public static <T> T unmarshal(Class<T> docClass, InputStream inputStream)
throws JAXBException, SAXException {
String packageName = docClass.getPackage().getName();
JAXBContext jc = JAXBContext.newInstance(packageName);
Unmarshaller u = jc.createUnmarshaller();
XMLValidator xmlValidator=new XMLValidator();
xmlValidator.validateXMLToSchema(u, null);
我有幾個字段爲必填字段按XSD但即使除去它們是人的可持續發展,同時給我的錯誤了不給任何東西,並解析我的XML文件到相應的對象 可以任何一點出現什麼問題?
這裏是XSD
<xs:element name="destination" type="Destination"/>
<xs:complexType name="Destination">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="destinationID" type="xs:string" minOccurs="0"/>
<xs:element name="shortDescription" type="xs:string" minOccurs="0"/>
<xs:element name="longDescription" type="xs:string" minOccurs="0"/>
<xs:element name="stateID" type="xs:string"/>
<xs:element name="typeCode" type="xs:int"/>
<xs:element name="countryCode" type="xs:string"/>
<xs:element name="categories" type="xs:string"/>
<xs:element name="transport" type="Transport" minOccurs="0" maxOccurs="1"/>
<xs:element name="culture" type="Culture" minOccurs="0" maxOccurs="1"/>
<xs:element name="events" type="Events" minOccurs="0" maxOccurs="1"/>
<xs:element name="placesToVisit" type="PlacesToVisit" minOccurs="0" maxOccurs="1"/>
<xs:element name="contacts" type="Contact" minOccurs="0" maxOccurs="1"/>
<xs:element name="addresses" type="address" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
的部分和Java文件生成
@XmlElement(required = true)
protected String name;
protected String destinationID;
protected String shortDescription;
protected String longDescription;
@XmlElement(required = true)
protected String stateID;
在我從XML文件,但仍處於驗證部分沒有報警去除STATEID
感謝提前
提供相應的架構和JAXB對象。 – 2010-12-09 15:03:25
有很多創建對象只需要根對象? – 2010-12-09 15:08:47