Использование CXF 2.3.1.
Генерирование Java из WSDL с использованием JAXB.
Использование
<jaxws:properties>
<entry key="schema-validation-enabled" value="true" />
</jaxws:properties>
в конфигурации клиента.
Мой тест создает объект, который не удовлетворяет этому конкретному требованию WSDL:
<xsd:simpleType name="UUID.Content">
<xsd:annotation>
<xsd:documentation xml:lang="EN">
Universally Unique Identifier
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:token">
<xsd:length value="36" />
<xsd:pattern
value="[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}" />
</xsd:restriction>
</xsd:simpleType>
Однако сообщение распределяется и проходит через всю исходящую цепочку перехватчиков.
WSDL является односторонним: только для ввода.
wsdlLocation указывается в аннотации в Impls.
Интересно, что входящие сообщения, не прошедшие проверку того же ограничения, блокируются цепью перехватчика во время демаршаллинга.
Я тестирую на WebLogic. Я также мог бы проверить на WebSphere необходимо.
Другие ошибки проверки XSD (например, отсутствующий обязательный элемент) перехватываются исходящим маршаллером.
Причина, по которой мы обновили CXF 2.3.1 до версии 2.2.6, заключалась в том, что мы наблюдали похожие проблемы с входящими сообщениями. В 2.3.1 полная проверка XSD происходит для входящих сообщений, но не для исходящих.
Вот ошибка в CXF:
https://issues.apache.org/jira/browse/CXF-3233
Мы решили эту проблему, используя org.springframework.xml.validation.XmlValidator для проверки перед отправкой сообщения в цепочку перехватчиков CXF. Я надеюсь на исправления, которые используют цепочку перехватчиков CXF. Однако я подозреваю, что это ошибка в CXF.