我正在使用Apache CXF开发Web服务,并采用第一种方法进行模式验证。问题是,验证无效。没有错误,因此它没有被激活。但验证is configured。
所以,我已经看了一下你可以找到的官方Apache CXF示例here。
我查看了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配置来启用架构验证。
对于此示例,架构验证有效。两个示例之间的区别在于第二个示例使用 JAX-WS API和XMLBeans 方法。它有事可做吗?为什么架构验证不适用于第一个示例?可能,我错过了一些东西。
答案 0 :(得分:0)
对于服务端的验证,可能需要在jaxws:endpoint上设置wsdlLocation属性,以便加载WSDL(然后包含模式)。目前,该示例中的验证仅在客户端进行。如果您运行该服务,则日志显示:
INFO: Creating Service {http://server.customerservice.example.com/}CustomerServiceImplService from class com.example.customerservice.CustomerService
表明它根本没有使用WSDL。