]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc.agent/src/main/java/org/argeo/slc/ws/client/ValidatingClientInterceptor.java
Introduce agent project
[gpl/argeo-slc.git] / org.argeo.slc.agent / src / main / java / org / argeo / slc / ws / client / ValidatingClientInterceptor.java
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 (file)
index 0000000..cd3add6
--- /dev/null
@@ -0,0 +1,88 @@
+package org.argeo.slc.ws.client;\r
+\r
+import java.io.IOException;\r
+\r
+import javax.xml.transform.Source;\r
+\r
+import org.springframework.ws.client.WebServiceClientException;\r
+import org.springframework.ws.client.WebServiceIOException;\r
+import org.springframework.ws.client.support.interceptor.ClientInterceptor;\r
+import org.springframework.ws.context.MessageContext;\r
+import org.springframework.xml.validation.XmlValidator;\r
+import org.xml.sax.SAXParseException;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+\r
+public class ValidatingClientInterceptor implements ClientInterceptor {\r
+       private final static Log log = LogFactory\r
+                       .getLog(ValidatingClientInterceptor.class);\r
+\r
+       private Boolean validateRequest = true;\r
+       private Boolean validateResponse = false;\r
+       private XmlValidator validator = null;\r
+\r
+       public boolean handleFault(MessageContext messageContext)\r
+                       throws WebServiceClientException {\r
+               return true;\r
+       }\r
+\r
+       public boolean handleRequest(MessageContext messageContext)\r
+                       throws WebServiceClientException {\r
+               if (validateRequest) {\r
+                       if (messageContext.getRequest() == null)\r
+                               return true;\r
+\r
+                       Source source = messageContext.getRequest().getPayloadSource();\r
+                       try {\r
+                               return validate(source);\r
+                       } catch (IOException e) {\r
+                               throw new WebServiceIOException("Cannot validate request", e);\r
+                       }\r
+               } else {\r
+                       return true;\r
+               }\r
+       }\r
+\r
+       public boolean handleResponse(MessageContext messageContext)\r
+                       throws WebServiceClientException {\r
+               if (validateResponse) {\r
+                       if (messageContext.getResponse() == null)\r
+                               return true;\r
+                       \r
+                       Source source = messageContext.getResponse().getPayloadSource();\r
+                       try {\r
+                               return validate(source);\r
+                       } catch (IOException e) {\r
+                               throw new WebServiceIOException("Cannot validate response", e);\r
+                       }\r
+               } else {\r
+                       return true;\r
+               }\r
+       }\r
+\r
+       protected boolean validate(Source source) throws IOException {\r
+               SAXParseException[] exceptions = validator.validate(source);\r
+               if (exceptions.length != 0) {\r
+                       for (SAXParseException ex : exceptions) {\r
+                               log.error(ex.getMessage());\r
+                       }\r
+                       return false;\r
+               } else {\r
+                       return true;\r
+               }\r
+       }\r
+\r
+       public void setValidateRequest(Boolean validateRequest) {\r
+               this.validateRequest = validateRequest;\r
+       }\r
+\r
+       public void setValidateResponse(Boolean validateResponse) {\r
+               this.validateResponse = validateResponse;\r
+       }\r
+\r
+       public void setValidator(XmlValidator validator) {\r
+               this.validator = validator;\r
+       }\r
+\r
+}\r