]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.launcher/src/main/java/org/argeo/slc/ws/client/WebServiceUtils.java
Introduce org.argeo.slc.lib.detached
[gpl/argeo-slc.git] / runtime / org.argeo.slc.launcher / 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.apache.commons.logging.Log;
9 import org.apache.commons.logging.LogFactory;
10 import org.springframework.ws.client.core.WebServiceTemplate;
11 import org.springframework.ws.soap.SoapFaultDetail;
12 import org.springframework.ws.soap.SoapFaultDetailElement;
13 import org.springframework.ws.soap.client.SoapFaultClientException;
14 import org.springframework.xml.transform.StringResult;
15 import org.w3c.dom.Node;
16
17 public abstract class WebServiceUtils {
18 private final static Log log = LogFactory.getLog(WebServiceUtils.class);
19
20 public static Object marshalSendAndReceiveSafe(WebServiceTemplate template,
21 Object req) {
22 try {
23 Object resp = marshalSendAndReceive(template, req);
24 return resp;
25 } catch (Exception e) {
26 log.error("Cannot send web servicerequest: " + e.getMessage());
27 if (log.isDebugEnabled()) {
28 log.debug("Webservice exception details: ", e);
29 }
30 return null;
31 }
32 }
33
34 public static Object marshalSendAndReceive(WebServiceTemplate template,
35 Object req) {
36 if (log.isTraceEnabled()) {
37 try {
38 StringResult result = new StringResult();
39 template.getMarshaller().marshal(req, result);
40 log.trace("About to send " + result);
41 } catch (Exception e) {
42 log.error("Cannot marshall " + req + " for logging", e);
43 }
44 }
45 Object resp = template.marshalSendAndReceive(req);
46 return resp;
47 }
48
49 public static void manageSoapException(SoapFaultClientException e) {
50 log
51 .error("WS root cause: "
52 + e.getSoapFault().getFaultStringOrReason());
53 if (log.isTraceEnabled()) {
54 StringBuffer stack = new StringBuffer("");
55 SoapFaultDetail detail = e.getSoapFault().getFaultDetail();
56 if (detail != null) {
57 Iterator<SoapFaultDetailElement> it = (Iterator<SoapFaultDetailElement>) detail
58 .getDetailEntries();
59 while (it.hasNext()) {
60 SoapFaultDetailElement elem = it.next();
61 if (elem.getName().getLocalPart().equals("StackElement")) {
62 Source source = elem.getSource();
63 if (source instanceof DOMSource) {
64 Node node = ((DOMSource) source).getNode();
65 // stack.append(node.getTextContent()).append('\n');
66 stack
67 .append(
68 node.getChildNodes().item(0)
69 .getNodeValue()).append(
70 '\n');
71 }
72 }
73 }
74
75 if (stack.length() > 0)
76 log.error("WS root cause stack: " + stack);
77 }
78 }
79 }
80
81 private WebServiceUtils() {
82
83 }
84 }