我实现了利用CXF(2.7.1)与WSDL & XSD,其中包括,除其他事项外,下列类型的工作Web服务:为什么这个XSD元素通过默认的ValidationEventHandler?
<xs:simpleType name="SimpleIdType">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Za-z0-9:\.\-]{20}"/>
</xs:restriction>
</xs:simpleType>
我解释这是:只接受20字符串其中只包含字母数字字符和':','。'和' - '。
当我发送一个SOAP消息到我的web服务并且相应的元素包含FAAAAAAAAAAAAAAAAAAA
时,服务当然可以正确接受,没有任何错误。
然而,如果我发送相同的SOAP消息与#
代替F
(即#AAAAAAAAAAAAAAAAAAA
),服务仍然接受消息,而不会发出任何验证错误(解组或其他方式)。
为什么?
是不是default ValidationEventHandler应该通过抛出“Unmarshalling Error”来处理?
哇。 +1已经。我会彻底阅读你的文章,并让你知道,如果这对我有用。我是否理解正确,这意味着也设置我自己的[ValidationEventHandler](https://jaxb.java.net/jaxb20-ed/api/javax/xml/bind/ValidationEventHandler.html)? – Withheld
好的,我试着实现你的解决方案,但是我在[我的CXF生成的代码](http://stackoverflow.com/q/19184721/1864054)中没有'main()'。 [哪里](http://stackoverflow.com/q/19184721/1864054)钩我的纲领和Unmarshaller代码? – Withheld
看起来我正在接近这个错误的方式(因为涉及到CXF):根据[this](http://svn.apache.org/repos/asf/cxf/trunk/distribution/src/main/release/samples/wsdl_first_xmlbeans /),类路径(及其内容)上的cxf.xml配置文件的存在会更改CXF的默认行为,即消息参数不会被验证。这是令人困惑的,因为如果我发送“?”,我肯定会得到“解组错误”(默认为!)而不是'xs:timestamp' ...我错过了什么? – Withheld