我正在使用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方法吗?
谢谢!
答案 0 :(得分:0)
默认情况下,JAX-WS不会针对传入请求执行架构验证。您可以通过将@SchemaValidation添加到您的服务来启用它。
但是,在回答你的结束问题时,你的方法绝对应该接受JAXB生成的对象作为参数。接受XML作为字符串是非常坏主意,因为它表明它没有被验证或解析。使用JAX-WS,Spring-WS等的重点是避免自己搞乱XML。这些库非常适合你。
继续此之后,通常不需要启用模式验证。这是因为JAX-WS将尝试使用JAXB marshaller生成参数。如果它无法从它收到的XML字符串中生成这些对象,那么它们显然无效,并且会抛出异常。
tl; dr - 是的,你可以验证架构,但它可能不值得做。