0

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

@WebService
public interface MySoapService {

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

这里 TestRequest 是使用 jaxb 从 xsd 生成的。我想验证针对 xsd 的请求。

在这里,如果验证失败,那么我需要将所有验证错误保存在一个列表中并发送给客户端。我怎样才能做到这一点?请帮我。

谢谢!

谢谢!

4

1 回答 1

0

选项 A:性能方面不是最好的解决方案,也不是最优雅的解决方案,但是由于您需要列出所有错误 - 实现 ValidationEventHandler,在 JAX-WS 逻辑处理程序中处理模式验证并抛出 SOAP 错误,接缝到成为最合适的解决方案。
选项 B:如果使用逻辑处理程序不是有吸引力的解决方案,SOAP 有效负载可能会在 SIB 中处理:

@Resource
WebServiceContext wsContext;

@WebMethod
public void test(String test) throws ValidationException {
    MessageContext messageContext = wsContext.getMessageContext();
    DOMSource source = (DOMSource) messageContext.getRequest().getPayloadSource();
    ...//Unmarshling and validating SOAP payload. Same as described in option A
}

选项 C:在较低级别操作,并具有额外的好处,即 SOAP 消息将被解组一次:

@WebServiceProvider
@ServiceMode(value=Service.Mode.MESSAGE)
public class TestProvider implements Provider<SOAPMessage>
{
    public SOAPMessage invoke(SOAPMessage request) 
    {
        SOAPBody requestBody = request.getSOAPBody();
        Document document = requestBody.extractContentAsDocument();
        ...//Unmarshling and validating SOAP payload. Same as described in option A
    }
}

这里描述了验证和其他不相关的东西,并且有关于模式验证的很好的文档。

于 2013-12-22T13:53:21.960 回答