我使用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>
答案 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的回答,这一发现成为可能。