我有一个奇怪的问题,我的Castor-Maven-Plugin生成的java类将无法解组XML字符串的内容。
我试图验证的XML看起来像这样:
...
<mediaType>audio/media</mediaType>
...
我正在根据以下模式对其进行验证:
(audio|video|document|application|example|image|message|model|multipart|text)/.+
Castor从以下位置生成类的XSD的相关部分:
...
<xs:simpleType name="mediaType">
<xs:annotation>
<xs:documentation>
The internet media type of the paired file. For example, a MP3 file would be audio/mpeg.
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="(audio|video|document|application|example|image|message|model|multipart|text)/.+"/>
</xs:restriction>
</xs:simpleType>
...
当我尝试解组XML String时抛出以下异常:
org.exolab.castor.xml.MarshalException: The following exception occured while validating field: _mediaType of class: my.domain.GeneratedClass: audio/mpegdoes not match the required regular expression: "(audio|video|document|application|example|image|message|model|multipart|text)/.+"{File: [not available]; line: 23; column: 12}...
现在,根据IntelliJ的XML验证和我尝试过的所有其他正则表达式工具,这应该不是问题。为什么Castor似乎这么认为?
答案 0 :(得分:1)
Castor没有(好的)本机Regex验证器,您必须在配置文件中指定一个。见http://castor.codehaus.org/conf-lib.html
将名为castor.properties的配置文件添加到包含以下内容的类路径中:
org.exolab.castor.regexp=org.exolab.castor.util.JakartaRegExpEvaluator
您可能还必须向Jakven Regex添加依赖项:
<dependency>
<groupId>jakarta-regexp</groupId>
<artifactId>jakarta-regexp</artifactId>
<version>1.4</version>
</dependency>