+ protected void manageSoapException(SoapFaultClientException e) {\r
+ log\r
+ .error("WS root cause: "\r
+ + e.getSoapFault().getFaultStringOrReason());\r
+ StringBuffer stack = new StringBuffer("");\r
+ SoapFaultDetail detail = e.getSoapFault().getFaultDetail();\r
+ if (detail != null) {\r
+ Iterator<SoapFaultDetailElement> it = (Iterator<SoapFaultDetailElement>) detail\r
+ .getDetailEntries();\r
+ while (it.hasNext()) {\r
+ SoapFaultDetailElement elem = it.next();\r
+ if (elem.getName().getLocalPart().equals("StackElement")) {\r
+ Source source = elem.getSource();\r
+ if (source instanceof DOMSource) {\r
+ Node node = ((DOMSource) source).getNode();\r
+ stack.append(node.getTextContent()).append('\n');\r
+ }\r
+ }\r
+ }\r
+\r
+ if (stack.length() > 0 && log.isTraceEnabled())\r
+ log.error("WS root cause stack: " + stack);\r
+ }\r
+ }\r
+\r
+ protected Object marshalSendAndReceive(Object req) {\r
+ if (log.isTraceEnabled()) {\r
+ try {\r
+ StringResult result = new StringResult();\r
+ template.getMarshaller().marshal(req, result);\r
+ log.trace("About to send " + result);\r
+ } catch (Exception e) {\r
+ log.error("Cannot marshall " + req + " for logging", e);\r
+ }\r
+ }\r
+ Object resp = template.marshalSendAndReceive(req);\r
+ return resp;\r
+ }\r