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
.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
;
15 import org
.apache
.commons
.logging
.Log
;
16 import org
.apache
.commons
.logging
.LogFactory
;
18 public abstract class WebServiceUtils
{
19 private final static Log log
= LogFactory
.getLog(WebServiceUtils
.class);
21 public static Object
marshalSendAndReceiveSafe(WebServiceTemplate template
,
24 Object resp
= marshalSendAndReceive(template
, req
);
26 } catch (Exception e
) {
27 log
.error("Cannot send web servicerequest: " + e
.getMessage());
28 if (log
.isDebugEnabled()) {
29 log
.debug("Webservice exception details: ", e
);
35 public static Object
marshalSendAndReceive(WebServiceTemplate template
,
37 if (log
.isTraceEnabled()) {
39 StringResult result
= new StringResult();
40 template
.getMarshaller().marshal(req
, result
);
41 log
.trace("About to send " + result
);
42 } catch (Exception e
) {
43 log
.error("Cannot marshall " + req
+ " for logging", e
);
46 Object resp
= template
.marshalSendAndReceive(req
);
50 public static void manageSoapException(SoapFaultClientException e
) {
52 .error("WS root cause: "
53 + e
.getSoapFault().getFaultStringOrReason());
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');
70 if (stack
.length() > 0 && log
.isTraceEnabled())
71 log
.error("WS root cause stack: " + stack
);
75 private WebServiceUtils() {