gpt4 book ai didi

java - 在 JAX-WS 代码优先方法中根据模式验证 soap 请求

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:59:14 25 4
gpt4 key购买 nike

我创建了一个 JAX-WS 网络服务,在一些请求字段上使用 JAXB 注释使其成为强制性的。

@XmlElement(required = true)
protected String number;

cxf-java2ws-plugin 生成的 WSDL 是正确的,字段上没有 minOccurs="0" :

<xs:element name="number" type="xs:string"/>

但是当服务收到不遵守这些约束(缺少字段)的请求时,不会抛出 SoapFault 或异常。

我还尝试将 @SchemaValidation 添加到我的 WS 类中,但没有效果。

如何根据模式(或者更确切地说是根据基于注释的约束的验证)自动执行请求验证?

最佳答案

minOccurs 的默认值为 1。因此,您的值必须存在。
nillable 的默认值为 false。所以,你的值不能为空。
并且您已在网络服务中激活模式验证:

@WebService
@SchemaValidation(enabled = true)
public class MyService {
//...
}

最后但同样重要的是,您有一个结果架构。

但是,JAXB 引用实现不会为您进行任何验证。

您必须使用 Java Xml Validation API 自行完成此操作

这里是模式验证的简单示例

public class XmlSchemaValidation {

public static void main(String[] args) throws Exception {
Something myObject = new Something();
validate(myObject);
}
public static void validate(Something myObject) throws Exception {

Schema s = SchemaFactory
.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI)
.newSchema(new File("Something.xsd"));

Validator validator = s.newValidator();
//You can set an error handler
//validator.setErrorHandler(errorHandler);
validator.validate( new JAXBSource(JAXBContext.newInstance(Something.class), myObject));
}

}

关于java - 在 JAX-WS 代码优先方法中根据模式验证 soap 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27398060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com