我正在使用jax-ws
来开发基于soap的网络服务。我有以下端点,它有一个如下的 Web 方法。
@WebService
public interface MySoapService {
@WebMethod
public List<Result> getResult(TestRequest request);
}
在上面的 Web 方法中,TestRequest 是使用 JAXB 从我的 XSD 生成的。我的问题是,由于此 Web 服务已公开,并且将 JAXB 生成的对象作为输入,我是否需要针对 XSD 执行任何验证?
如果我的方法采用 XML 字符串作为输入,那么我可以针对 XSD 进行验证。但这里我有一个 webmethod 直接将 JAXB 对象作为输入。在这种情况下,根据 XSD 验证输入是其责任。
此外,请建议我使用 JAX-WS,我的 Web 方法采用 JAXB 生成的对象作为输入,而不是 XML 字符串。 那么哪一个是标准的呢?将 xml 字符串作为输入或从 XSD 生成的 JAXB 对象?我可以直接编写一个接受 JAXB 生成对象的 Web 方法吗?
谢谢!
最佳答案
默认情况下,JAX-WS 不会针对传入请求执行模式验证。您可以通过将 @SchemaValidation 添加到您的服务来启用它。
但是,在回答您的结束问题时,您的方法绝对应该接受 JAXB 生成的对象作为参数。接受 XML 作为字符串是一个非常坏主意,因为它表明它没有被验证或解析。使用 JAX-WS、Spring-WS 等的全部目的是避免自己弄乱 XML。这些库非常适合您。
接下来,通常不需要打开模式验证。这是因为 JAX-WS 将尝试使用 JAXB 编码器生成参数。如果它无法从接收到的 XML 字符串生成这些对象,那么它们显然是无效的,并且会抛出异常。
tl;dr - 是的,您可以验证架构,但这可能不值得这样做。
关于java - 在 jax-ws 中根据 XSD 验证 Web 服务请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19809672/