]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.launcher/src/main/java/org/argeo/slc/ws/client/ValidatingClientInterceptor.java
Introduce org.argeo.slc.lib.detached
[gpl/argeo-slc.git] / runtime / org.argeo.slc.launcher / src / main / java / org / argeo / slc / ws / client / ValidatingClientInterceptor.java
1 package org.argeo.slc.ws.client;
2
3 import java.io.IOException;
4
5 import javax.xml.transform.Source;
6
7 import org.springframework.ws.client.WebServiceClientException;
8 import org.springframework.ws.client.WebServiceIOException;
9 import org.springframework.ws.client.support.interceptor.ClientInterceptor;
10 import org.springframework.ws.context.MessageContext;
11 import org.springframework.xml.validation.XmlValidator;
12 import org.xml.sax.SAXParseException;
13
14 import org.apache.commons.logging.Log;
15 import org.apache.commons.logging.LogFactory;
16
17 public class ValidatingClientInterceptor implements ClientInterceptor {
18 private final static Log log = LogFactory
19 .getLog(ValidatingClientInterceptor.class);
20
21 private Boolean validateRequest = true;
22 private Boolean validateResponse = false;
23 private XmlValidator validator = null;
24
25 public boolean handleFault(MessageContext messageContext)
26 throws WebServiceClientException {
27 return true;
28 }
29
30 public boolean handleRequest(MessageContext messageContext)
31 throws WebServiceClientException {
32 if (validateRequest) {
33 if (messageContext.getRequest() == null)
34 return true;
35
36 Source source = messageContext.getRequest().getPayloadSource();
37 try {
38 return validate(source);
39 } catch (IOException e) {
40 throw new WebServiceIOException("Cannot validate request", e);
41 }
42 } else {
43 return true;
44 }
45 }
46
47 public boolean handleResponse(MessageContext messageContext)
48 throws WebServiceClientException {
49 if (validateResponse) {
50 if (messageContext.getResponse() == null)
51 return true;
52
53 Source source = messageContext.getResponse().getPayloadSource();
54 try {
55 return validate(source);
56 } catch (IOException e) {
57 throw new WebServiceIOException("Cannot validate response", e);
58 }
59 } else {
60 return true;
61 }
62 }
63
64 protected boolean validate(Source source) throws IOException {
65 SAXParseException[] exceptions = validator.validate(source);
66 if (exceptions.length != 0) {
67 for (SAXParseException ex : exceptions) {
68 log.error(ex.getMessage());
69 }
70 return false;
71 } else {
72 return true;
73 }
74 }
75
76 public void setValidateRequest(Boolean validateRequest) {
77 this.validateRequest = validateRequest;
78 }
79
80 public void setValidateResponse(Boolean validateResponse) {
81 this.validateResponse = validateResponse;
82 }
83
84 public void setValidator(XmlValidator validator) {
85 this.validator = validator;
86 }
87
88 }