我很难获得cxf来验证我的服务为第三方创建的xml请求。
我的项目使用maven。这是我的项目结构
主要模块:
+ Sub-Module1 =应用程序
+ sub-Module2 = Interfaces
在Interfaces中,在src / main / resources里面我有我的wsdl和xsd。 所以,src / main / resources + mywsdl.wsdl。 + myschema.xsd
接口子模块在Application-sub-module中列为依赖项。 在Application子模块中,src / maim / resources中有一个cxsf文件。
<jaxws:client name="{myTargerNameSpaceName}port"
createdFromAPI="true">
<jaxws:properties>
<entry key="schema-validation-enabled" value="true" />
</jaxws:properties>
</jaxws:client>
和:
<jaxws:endpoint name="{myTargetNameSpaceName}port"
wsdlLocation="/mywsdl.wsdl"
createdFromAPI="true">
<jaxws:properties>
<entry key="schema-validation-enabled" value="true" />
</jaxws:properties>
</jaxws:endpoint>
我尝试将“name =”{myTargetNameSpaceName} port“更改为”name =“{myEndPointName} port”
但是没有铁砧。
我的申请有效。但它只是不验证我生产的xml必须由第三方应用程序使用。 我想让验证工作,以便我发送的任何请求都是有效的。
有什么建议吗?
答案 0 :(得分:2)
只需在服务实现类上添加@org.apache.cxf.annotations.SchemaValidation
注释,架构验证即可运行。
答案 1 :(得分:1)
首先确保name属性的值为{NAMESPACE} PORT_NAME,其中NAMESPACE是您的命名空间URI,PORT_NAME是您的WSDL端口的名称。在没有看到您的WSDL的情况下,我不知道您是否将WSDL端口命名为“端口”,或者您是否仅仅提供了一个清理过的示例。
例如,我的WSDL命名空间是“http://example.com/services”,我的WSDL端口元素的名称是“myPort”,Spring配置看起来像这样
<jaxws:endpoint name="{http://example.com/services}myPort" >
...
请参阅CXF docs
中的“CreatedFromAPI”属性说明如果这不能解决您的问题,请尝试查看wsdl_first示例代码,升级您的CXF版本,和/或使用测试代码发布您的问题,向CXF user list展示您的问题。< / p>
答案 2 :(得分:0)
我们有类似的问题。 CXF 2.3.1修复了传入消息但不传出消息的问题。
https://issues.apache.org/jira/browse/CXF-3233
我们通过编组消息并在服务器中验证它们,然后通过CXF拦截器链发送它们来解决它。我们使用org.springframework.xml.validation.XmlValidator进行验证。
我希望未来的CXF版本能解决这个问题,但这就是我们现在所做的。