Проверка схемы Apache CFX - сначала контракт
Я занимаюсь разработкой веб-сервиса с использованием Apache CXF и сначала использую контракт с проверкой схемы. Проблема в том, что проверка не работает. Там нет ошибки, поэтому он как бы не активирован. Но проверка настроена.
Итак, я взглянул на официальные примеры Apache CXF, которые вы можете найти здесь.
Я посмотрел пример wsdl_first и изменил его, добавив проверку схемы и некоторые ограничения в WSDL:
<!-- HTTP Endpoint -->
<jaxws:endpoint xmlns:customer="http://customerservice.example.com/"
id="CustomerServiceHTTP" address="http://localhost:9090/CustomerServicePort"
serviceName="customer:CustomerServiceService" endpointName="customer:CustomerServiceEndpoint"
implementor="com.example.customerservice.server.CustomerServiceImpl">
<jaxws:features>
<bean class="org.apache.cxf.feature.LoggingFeature" />
</jaxws:features>
<!-- schema validation-->
<jaxws:properties>
<entry key="schema-validation-enabled" value="true" />
</jaxws:properties>
</jaxws:endpoint>
К моему удивлению, это тоже не работает.
Итак, я взглянул на пример wsdl_first_xmlbeans, где в соответствии с файлом README.txt также показано, как можно использовать конфигурацию CXF для включения проверки схемы.
И для этого примера проверка схемы работает. Разница между обоими примерами заключается в том, что во втором используются API-интерфейсы JAX-WS и подход XMLBeans. Это как-то связано? Почему проверка схемы не работает для первого примера? Возможно, я что-то упустил.
1 ответ
Для проверки на стороне службы, вероятно, потребуется установить атрибут wsdlLocation в конечной точке jaxws:, чтобы он загружал WSDL (который затем содержал бы схемы). В настоящее время проверка в этом примере выполняется только на стороне клиента. Если вы запускаете сервис, журнал показывает:
INFO: Creating Service {http://server.customerservice.example.com/}CustomerServiceImplService from class com.example.customerservice.CustomerService
который показывает, что он вообще не использует WSDL.