为什么这个XSD元素通过默认的ValidationEventHandler?

时间:2013-10-03 20:17:42

标签: jaxb xsd wsdl cxf xsd-validation

我使用CXF(2.7.1)和WSDL&amp ;;实现了一个有效的Web服务。 XSD包括以下类型:

<xs:simpleType name="SimpleIdType">
  <xs:restriction base="xs:string">
    <xs:pattern value="[A-Za-z0-9:\.\-]{20}"/>
  </xs:restriction>
</xs:simpleType>

我将其解释为:只接受20个字符串,其中只包含字母数字字符和':','。'和' - '

当我使用包含FAAAAAAAAAAAAAAAAAAA的相应元素向我的Web服务发送SOAP消息时,该服务当然会正确接受而不会出现任何错误。

但是,如果我使用#而不是F(即#AAAAAAAAAAAAAAAAAAA)发送相同的SOAP消息,则服务仍会接受该消息,而不会发出任何验证错误(解组或否则)。

为什么?

default ValidationEventHandler是不是应该通过抛出“解组错误”来处理它?<​​/ p>

2 个答案:

答案 0 :(得分:1)

JAXB模型(生成或手动编码)在其注释中不包含XML模式的所有元数据。如果要对模式的所有方面进行验证,可以在Schema上指定Unmarshaller的实例。

答案 1 :(得分:0)

我终于找到了这个基于CXF的案例的正确答案。

CXF已经内置了运行时架构验证。它名为schema validation via configuration,我的代码中唯一缺少的是在<jaxws:endpoint AKA beans.xml中现有的application-context.xml元素内启用它的XML:

<jaxws:properties>
    <entry key="schema-validation-enabled" value="true" />
</jaxws:properties>

由于@Patrick的回答,这一发现成为可能。