]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc.core/src/main/java/org/argeo/slc/ws/client/WebServiceUtils.java
Introduce XSLT report generation
[gpl/argeo-slc.git] / org.argeo.slc.core / src / main / java / org / argeo / slc / ws / client / WebServiceUtils.java
1 package org.argeo.slc.ws.client;
2
3 import java.util.Iterator;
4
5 import javax.xml.transform.Source;
6 import javax.xml.transform.dom.DOMSource;
7
8 import org.springframework.ws.client.core.WebServiceTemplate;
9 import org.springframework.ws.soap.SoapFaultDetail;
10 import org.springframework.ws.soap.SoapFaultDetailElement;
11 import org.springframework.ws.soap.client.SoapFaultClientException;
12 import org.springframework.xml.transform.StringResult;
13 import org.w3c.dom.Node;
14
15 import org.apache.commons.logging.Log;
16 import org.apache.commons.logging.LogFactory;
17
18 public abstract class WebServiceUtils {
19 private final static Log log = LogFactory.getLog(WebServiceUtils.class);
20
21 public static Object marshalSendAndReceive(WebServiceTemplate template,
22 Object req) {
23 if (log.isTraceEnabled()) {
24 try {
25 StringResult result = new StringResult();
26 template.getMarshaller().marshal(req, result);
27 log.trace("About to send " + result);
28 } catch (Exception e) {
29 log.error("Cannot marshall " + req + " for logging", e);
30 }
31 }
32 Object resp = template.marshalSendAndReceive(req);
33 return resp;
34 }
35
36 public static void manageSoapException(SoapFaultClientException e) {
37 log
38 .error("WS root cause: "
39 + e.getSoapFault().getFaultStringOrReason());
40 StringBuffer stack = new StringBuffer("");
41 SoapFaultDetail detail = e.getSoapFault().getFaultDetail();
42 if (detail != null) {
43 Iterator<SoapFaultDetailElement> it = (Iterator<SoapFaultDetailElement>) detail
44 .getDetailEntries();
45 while (it.hasNext()) {
46 SoapFaultDetailElement elem = it.next();
47 if (elem.getName().getLocalPart().equals("StackElement")) {
48 Source source = elem.getSource();
49 if (source instanceof DOMSource) {
50 Node node = ((DOMSource) source).getNode();
51 stack.append(node.getTextContent()).append('\n');
52 }
53 }
54 }
55
56 if (stack.length() > 0 && log.isTraceEnabled())
57 log.error("WS root cause stack: " + stack);
58 }
59 }
60
61 private WebServiceUtils() {
62
63 }
64 }