я реализовал рабочий веб-службы с помощью CXF (2.7.1) с WSDL & XSD, которые включают в себя, среди прочего, следующий тип:Почему этот элемент 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 моей веб-службе с соответствующим элементом, содержащим FAAAAAAAAAAAAAAAAAAA
, служба, конечно, принимает корректно без каких-либо ошибок.
Однако, если я отправить идентичное сообщение SOAP с #
вместо F
(т.е. #AAAAAAAAAAAAAAAAAAA
), служба по-прежнему принимает сообщение, без выдачи каких-либо ошибка проверки (немаршалинг или иным образом).
Почему?
Не является ли default ValidationEventHandler должен обрабатывать это путем выброса «Ошибка отмены отмены»?
Ничего себе. +1 уже. Я собираюсь подробно прочитать вашу статью и сообщить, что это сработало для меня. Правильно ли я понимаю, что это означает также установку моего собственного [ValidationEventHandler] (https://jaxb.java.net/jaxb20-ed/api/javax/xml/bind/ValidationEventHandler.html)? – Withheld
ОК, я попытался реализовать ваше решение, но у меня нет 'main()' в [моем CXF-сгенерированном коде] (http://stackoverflow.com/q/19184721/1864054). [Где] (http://stackoverflow.com/q/19184721/1864054) подключаю код схемы и Unmarshaller? – Withheld
Похоже, я приближаюсь к этому неправильно (потому что CXF участвует): Согласно [этому] (http://svn.apache.org/repos/asf/cxf/trunk/distribution/src/main/release/samples/wsdl_first_xmlbeans /), наличие файла конфигурации cxf.xml в пути к классам (и его содержимом) изменяет поведение CXF по умолчанию, что параметры сообщения не будут проверяться. Это сбивает с толку, потому что я могу определенно получить «ошибку unmarshaling» (по умолчанию!), Если я отправлю сообщение «?» вместо 'xs: timestamp' ... Что мне не хватает? – Withheld