JAXB: 通过schema验证XML文件
2011-04-12 18:20
141 查看
在使用JAXB解析XML文件的时候我们有时候可能会需要通过schema文件验证XML的格式,接上文的XMLParser.java
示例代码如下:
Java代码
public
static
Object unmarshal(InputStream xml, Class<?> clazz)
throws
SAXException {
Object obj = null
;
ValidationEventCollector vec = new
ValidationEventCollector();
try
{
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new
File(
"C://eclipse//workspace1//STAF//test//employees.xsd"
));
JAXBContext jc = JAXBContext.newInstance(clazz.getPackage().getName());
Unmarshaller u = jc.createUnmarshaller();
u.setSchema(schema);
u.setEventHandler(vec);
obj = u.unmarshal(xml);
} catch
(JAXBException e) {
throw
new
RuntimeException(
"Can't unmarshal the XML file, error message: "
+ e.getMessage());
} finally
{
if
(vec !=
null
&& vec.hasEvents()) {
for
(ValidationEvent ve : vec.getEvents()) {
String msg = ve.getMessage();
ValidationEventLocator vel = ve.getLocator();
int
line = vel.getLineNumber();
int
column = vel.getColumnNumber();
System.out.println();
System.err.println("At line "
+ line +
", column "
+ column +
": "
+ msg);
}
}
}
return
obj;
}
该代码段适用于单一schema,或者在classpath中的多schema验证,如果是classpath外的多schema验证,请结合参考该文:XML validation for multiple schemas 验证使用多个XSD schema的XML文件
示例代码如下:
Java代码
public
static
Object unmarshal(InputStream xml, Class<?> clazz)
throws
SAXException {
Object obj = null
;
ValidationEventCollector vec = new
ValidationEventCollector();
try
{
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new
File(
"C://eclipse//workspace1//STAF//test//employees.xsd"
));
JAXBContext jc = JAXBContext.newInstance(clazz.getPackage().getName());
Unmarshaller u = jc.createUnmarshaller();
u.setSchema(schema);
u.setEventHandler(vec);
obj = u.unmarshal(xml);
} catch
(JAXBException e) {
throw
new
RuntimeException(
"Can't unmarshal the XML file, error message: "
+ e.getMessage());
} finally
{
if
(vec !=
null
&& vec.hasEvents()) {
for
(ValidationEvent ve : vec.getEvents()) {
String msg = ve.getMessage();
ValidationEventLocator vel = ve.getLocator();
int
line = vel.getLineNumber();
int
column = vel.getColumnNumber();
System.out.println();
System.err.println("At line "
+ line +
", column "
+ column +
": "
+ msg);
}
}
}
return
obj;
}
public static Object unmarshal(InputStream xml, Class<?> clazz) throws SAXException { Object obj = null; ValidationEventCollector vec = new ValidationEventCollector(); try { SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema schema = sf.newSchema(new File("C://eclipse//workspace1//STAF//test//employees.xsd")); JAXBContext jc = JAXBContext.newInstance(clazz.getPackage().getName()); Unmarshaller u = jc.createUnmarshaller(); u.setSchema(schema); u.setEventHandler(vec); obj = u.unmarshal(xml); } catch (JAXBException e) { throw new RuntimeException("Can't unmarshal the XML file, error message: " + e.getMessage()); } finally { if(vec != null && vec.hasEvents()) { for(ValidationEvent ve : vec.getEvents()) { String msg = ve.getMessage(); ValidationEventLocator vel = ve.getLocator(); int line = vel.getLineNumber(); int column = vel.getColumnNumber(); System.out.println(); System.err.println("At line " + line + ", column " + column + ": " + msg); } } } return obj; }
该代码段适用于单一schema,或者在classpath中的多schema验证,如果是classpath外的多schema验证,请结合参考该文:XML validation for multiple schemas 验证使用多个XSD schema的XML文件
相关文章推荐
- xml文件的schema也是经过jdk编译器编译的,如果xsd没引入完整,而xml中又用到了这些标签,就会编译不通过啊。
- jdom实现schema验证xml文件是否合法
- Schema验证XML文件
- [SoapUI]怎样运用Schema通过*.xsd文件来验证response对应的xml文件
- 通过XSD文件对XML文件进行格式验证
- dom4j通过dtd或者schema验证xml
- 在schema中datetime 的类型(符合 ISO 8601 格式)如何转换,如何通过其格式验证!
- 使用Apache xercesc验证XML文件的Schema
- 用dom4j如何使用Schema的xsd文件验证xml文件的合法性!
- 使用Apache xercesc验证XML文件的Schema
- XML validation for multiple schemas 验证使用多个XSD schema的XML文件
- JAVA使用JAXB框架根据schema.xsd文件验证XML合法性
- 通过自定义注解或拦截器实现APP调用后接口全局权限验证
- Schema验证XML
- javascript获取当前点击事件的ID属性值,IE已验证通过
- C#用HttpWebRequest通过代理服务器验证后抓取网页内容
- iOS UIWebView 通过 cookie 完成自动登录验证
- 通过action传过来的值在option获取进行验证
- 先客户端验证,通过后再执行服务器端事件
- oracle adf 通过代码路过JSF生命周期的验证阶段