值在模式方面不是有效的

Value is not facet-valid with respect to pattern

我在 XSD 中有这个元素:

<xs:simpleType name="elementWithAsterisks">
  <xs:restriction base="xs:string">
    <xs:length value="16"/>
    <xs:pattern value="^[0-9*]*$"/>
  </xs:restriction>
</xs:simpleType>

该元素的值可以是数字,也可以是数字加星号,长度必须为16个字符。例如,以下字符串应该是有效的:

 **1234567****01456**
 **1234567890654321**
 1***************

如果我向该元素发送这样的值,XStream returns 这条消息:

cvc-pattern-valid: Value '1234567****01456' is not facet-valid with respect to pattern '^[0-9*]*$' for type 'elementWithAsterisks'.

我正在使用 Java 和 XStream。这是我验证它的代码:

try {
    File xsdFile = new File("validation.xsd");
    SchemaFactory schemaFactory = SchemaFactory.newInstance(SCHEMA_LANGUAGE);
    factory.setSchema(schemaFactory.newSchema(xsdFile);
    SAXParser saxParser = factory.newSAXParser();
    XMLReader reader = saxParser.getXMLReader();
    reader.setErrorHandler(new XmlValidationErrorHandler());
    reader.parse(new InputSource(inputStream));
    isValid = true;
} catch (SAXException | ParserConfigurationException | IOException ex) {
    ex.printStackTrace();
    isValid = false;
}

XSD 中的正则表达式隐含在 ^$ 中。只需从您的 xs:pattern 中删除显式(冗余)的,您的 XSD 就会按预期工作:

  <xs:pattern value="[0-9*]*"/>