我有一个奇怪的问题,我的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这么认为?

最佳答案

Castor没有(好的)本机正则表达式验证器,您必须在配置文件中指定一个。见http://castor.codehaus.org/conf-lib.html

将一个名为castor.properties的配置文件添加到包含以下内容的类路径:

org.exolab.castor.regexp=org.exolab.castor.util.JakartaRegExpEvaluator


您可能还必须将对Jakarta Regex的依赖项添加到Maven:

 <dependency>
        <groupId>jakarta-regexp</groupId>
        <artifactId>jakarta-regexp</artifactId>
        <version>1.4</version>
    </dependency>

10-07 22:16