【发布时间】:2010-11-25 03:49:34
【问题描述】:
是否可以使用 xml 架构中的一些规则检查 java 对象中的值?
例如,我有一个String txt = "blablabla",我应该验证<xs:element name="foo" type="string32"/> 是否可以,string32 限制为 32 个字符。最大长度。
有可能吗?如果 xml 架构和 jaxb 无法实现,是否还有其他可能的架构语言?
谢谢。
【问题讨论】:
是否可以使用 xml 架构中的一些规则检查 java 对象中的值?
例如,我有一个String txt = "blablabla",我应该验证<xs:element name="foo" type="string32"/> 是否可以,string32 限制为 32 个字符。最大长度。
有可能吗?如果 xml 架构和 jaxb 无法实现,是否还有其他可能的架构语言?
谢谢。
【问题讨论】:
您可以执行以下操作:
import java.io.File;
import javax.xml.XMLConstants;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.util.JAXBSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
public class Demo {
public static void main(String[] args) throws Exception {
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new File("customer.xsd"));
JAXBContext jc = JAXBContext.newInstance(Customer.class);
Customer customer = new Customer();
// populate the customer object
JAXBSource source = new JAXBSource(jc, customer);
schema.newValidator().validate(source);
}
}
更详细的例子见:
【讨论】:
您必须将 Java 对象映射到 xml,然后将对象编组到 xml,然后将 xml 提供给进行模式验证的解析器。编写代码来解析 xml 模式并读取模式可能会更好,然后使用模式信息为您的对象构建验证器。这样您就不必为了验证它而将您的对象编组为 xml。
【讨论】: