X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.slc.agent%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fws%2Fclient%2FValidatingClientInterceptor.java;fp=org.argeo.slc.agent%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fws%2Fclient%2FValidatingClientInterceptor.java;h=cd3add67c5c00a5f189fc05b52c806a58644c0db;hb=a7b136d40c14e4559faa5c34dc2b4dd2170ac2d4;hp=0000000000000000000000000000000000000000;hpb=956079f214e8b52944d1b5fe4576a9a7587ebb6e;p=gpl%2Fargeo-slc.git diff --git a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ws/client/ValidatingClientInterceptor.java b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ws/client/ValidatingClientInterceptor.java new file mode 100644 index 000000000..cd3add67c --- /dev/null +++ b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ws/client/ValidatingClientInterceptor.java @@ -0,0 +1,88 @@ +package org.argeo.slc.ws.client; + +import java.io.IOException; + +import javax.xml.transform.Source; + +import org.springframework.ws.client.WebServiceClientException; +import org.springframework.ws.client.WebServiceIOException; +import org.springframework.ws.client.support.interceptor.ClientInterceptor; +import org.springframework.ws.context.MessageContext; +import org.springframework.xml.validation.XmlValidator; +import org.xml.sax.SAXParseException; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +public class ValidatingClientInterceptor implements ClientInterceptor { + private final static Log log = LogFactory + .getLog(ValidatingClientInterceptor.class); + + private Boolean validateRequest = true; + private Boolean validateResponse = false; + private XmlValidator validator = null; + + public boolean handleFault(MessageContext messageContext) + throws WebServiceClientException { + return true; + } + + public boolean handleRequest(MessageContext messageContext) + throws WebServiceClientException { + if (validateRequest) { + if (messageContext.getRequest() == null) + return true; + + Source source = messageContext.getRequest().getPayloadSource(); + try { + return validate(source); + } catch (IOException e) { + throw new WebServiceIOException("Cannot validate request", e); + } + } else { + return true; + } + } + + public boolean handleResponse(MessageContext messageContext) + throws WebServiceClientException { + if (validateResponse) { + if (messageContext.getResponse() == null) + return true; + + Source source = messageContext.getResponse().getPayloadSource(); + try { + return validate(source); + } catch (IOException e) { + throw new WebServiceIOException("Cannot validate response", e); + } + } else { + return true; + } + } + + protected boolean validate(Source source) throws IOException { + SAXParseException[] exceptions = validator.validate(source); + if (exceptions.length != 0) { + for (SAXParseException ex : exceptions) { + log.error(ex.getMessage()); + } + return false; + } else { + return true; + } + } + + public void setValidateRequest(Boolean validateRequest) { + this.validateRequest = validateRequest; + } + + public void setValidateResponse(Boolean validateResponse) { + this.validateResponse = validateResponse; + } + + public void setValidator(XmlValidator validator) { + this.validator = validator; + } + +}