kga*_*ron 11 java soap wsdl cxf jax-ws
我创建了一个JAX-WS Web服务,在某些请求字段上使用JAXB注释使其成为必需的.
@XmlElement(required = true)
protected String number;
Run Code Online (Sandbox Code Playgroud)
由cxf-java2ws-plugin生成的WSDL是正确的,minOccurs="0"
字段上没有:
<xs:element name="number" type="xs:string"/>
Run Code Online (Sandbox Code Playgroud)
但是当服务收到不遵守这些约束(缺少字段)的请求时,不会抛出SoapFault或异常.
我也试过添加@SchemaValidation
到我的WS类,没有任何效果.
如何针对schmema进行请求验证(或者更确切地说,基于注释的约束验证)可以自动化?
如果您无法解决问题,我建议两种解决方法:
我认为您可以在 Java 请求 bean 中添加一个 JAXB 回调 afterUnmarshal() (如此处所述),并在其中执行您想要的所有验证(格式验证或其他)。
例如 :
@XmlRootElement
public class YourRequest {
@XmlElement(required = true)
protected String number;
// some code here
public void afterUnmarshal(Unmarshaller unmarshaller, Object parent) {
if(number == null) {
// Throw validation exception
}
}
}
Run Code Online (Sandbox Code Playgroud)
另一种可能性是将 Bean 验证与 CXF 结合使用(如此处所述)。通常,基于模式的验证不是必需的,但如果您需要比基于模式的验证更复杂的验证,我认为它毕竟可以解决您的问题。
希望对您在等待更好的答案时有所帮助。
归档时间: |
|
查看次数: |
14271 次 |
最近记录: |