1 package org
.argeo
.slc
.ws
.client
;
3 import java
.util
.Iterator
;
5 import javax
.xml
.transform
.Source
;
6 import javax
.xml
.transform
.dom
.DOMSource
;
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
;
17 public abstract class WebServiceUtils
{
18 private final static Log log
= LogFactory
.getLog(WebServiceUtils
.class);
20 public static Object
marshalSendAndReceiveSafe(WebServiceTemplate template
,
23 Object resp
= marshalSendAndReceive(template
, req
);
25 } catch (Exception e
) {
26 log
.error("Cannot send web servicerequest: " + e
.getMessage());
27 if (log
.isDebugEnabled()) {
28 log
.debug("Webservice exception details: ", e
);
34 public static Object
marshalSendAndReceive(WebServiceTemplate template
,
36 if (log
.isTraceEnabled()) {
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
);
45 Object resp
= template
.marshalSendAndReceive(req
);
49 public static void manageSoapException(SoapFaultClientException e
) {
51 .error("WS root cause: "
52 + e
.getSoapFault().getFaultStringOrReason());
53 if (log
.isTraceEnabled()) {
54 StringBuffer stack
= new StringBuffer("");
55 SoapFaultDetail detail
= e
.getSoapFault().getFaultDetail();
57 Iterator
<SoapFaultDetailElement
> it
= (Iterator
<SoapFaultDetailElement
>) detail
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');
68 node
.getChildNodes().item(0)
69 .getNodeValue()).append(
75 if (stack
.length() > 0)
76 log
.error("WS root cause stack: " + stack
);
81 private WebServiceUtils() {