0

我正在使用jax-ws开发基于肥皂的网络服务。我有以下端点,它有一种如下的网络方法。

@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 方法吗?

谢谢!

4

1 回答 1

1

默认情况下,JAX-WS 不对传入请求执行模式验证。您可以通过将 @SchemaValidation 添加到您的服务来启用它。

但是,在回答您的结束问题时,您的方法绝对应该接受 JAXB 生成的对象作为参数。接受 XML 作为字符串是一个非常糟糕的主意,因为它表明它没有被验证或解析。使用 JAX-WS、Spring-WS 等的全部目的是避免自己弄乱 XML。这些库为您做得很好。

此后,通常不需要打开模式验证。这是因为 JAX-WS 将尝试使用 JAXB 编组器生成参数。如果它不能从它接收到的 XML 字符串中生成这些对象,那么它们显然是无效的,它会抛出异常。

tl;dr - 是的,您可以验证架构,但可能不值得这样做。

于 2013-11-06T11:16:41.550 回答