0

我正在使用 Apache CXF 开发 Web 服务,并使用带有模式验证的合同优先方法。问题是,验证不起作用。没有错误,所以没有激活它。但验证已配置

因此,我查看了您可以在此处找到的官方 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 配置来启用模式验证

对于此示例,模式验证有效。两个示例之间的区别在于第二个示例使用JAX-WS API 和 XMLBeans方法。它有什么关系吗?为什么模式验证不适用于第一个示例?可能,我错过了一些东西。

4

1 回答 1

0

对于服务端的验证,它可能需要在 jaxws:endpoint 上设置一个 wsdlLocation 属性,以便加载 WSDL(然后将包含模式)。目前,该示例中的验证仅在客户端进行。如果您运行该服务,日志将显示:

INFO: Creating Service {http://server.customerservice.example.com/}CustomerServiceImplService from class com.example.customerservice.CustomerService

这表明它根本没有使用 WSDL。

于 2013-06-04T15:17:14.070 回答