java - 在 jax-ws 中根据 XSD 验证 Web 服务请求?

标签 java spring web-services jaxb jax-ws

我正在使用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/

相关文章:

java - CrudRepository 生成了一个困惑的 Sql 请求

java - 如何在 jboss AS 7.2 中部署的 JbossWS-CXF Web 服务中引导 Spring

java - REST URI 设计 : Optional and multivalue information passing

java - Java 7 API 文档中的 "concurrent"和 "thread-safe"有什么区别?

Java EE应用程序不像jsp那样打印JSP文件,而是像HTML一样打印

java - 管理多个 catch block 中的重复代码

java - 为什么 'bodyPart.isMimeType("text/plain“)' give the error ' 无法加载 bodystructure”?

spring - 如何使用 XML 模式来验证由 JAXB 编码的 @ResponseBody

c# - WSDL 生成的代码未正确反序列化 XML 中的 long

java - 从 java web start 使用 CXF web 服务