繁体   English   中英

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

[英]Validating web service request against XSD in jax-ws?

我正在使用jax-ws开发基于soap的Web服务。 我在终点以下,它具有如下一种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-是的,您可以验证模式,但这可能不值得。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM