在jax-ws中验证针对XSD的Web服务请求?

时间:2013-11-06 10:31:27

标签: java spring web-services jaxb jax-ws

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

@WebService
public interface MySoapService {

    @WebMethod
    public List<Result> getResult(TestRequest request);
}

在上面的web方法中,使用JAXB 从我的XSD生成 TestRequest。我的问题是,这个Web服务是公开的,它将JAXB生成的对象作为输入,我是否需要对XSD执行任何验证

如果我的方法将XML字符串作为输入,那么我可以对XSD进行验证。但是在这里我有一个webmethod,它直接将JAXB对象作为输入。在这种情况下,验证XSD的输入是谁的责任。

另外,请建议我使用JAX-WS,我的web方法将JAXB生成的对象作为输入而不是XML字符串。 那么哪一个是标准的?将xml字符串作为输入或从XSD生成的JAXB对象?我可以直接编写一个接受JAXB生成对象的Web方法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

但是,在回答你的结束问题时,你的方法绝对应该接受JAXB生成的对象作为参数。接受XML作为字符串是非常坏主意,因为它表明它没有被验证或解析。使用JAX-WS,Spring-WS等的重点是避免自己搞乱XML。这些库非常适合你。

继续此之后,通常不需要启用模式验证。这是因为JAX-WS将尝试使用JAXB marshaller生成参数。如果它无法从它收到的XML字符串中生成这些对象,那么它们显然无效,并且会抛出异常。

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