]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc.core/src/main/java/org/argeo/slc/core/process/WebServiceSlcExecutionNotifier.java
Improve notifications to web services
[gpl/argeo-slc.git] / org.argeo.slc.core / src / main / java / org / argeo / slc / core / process / WebServiceSlcExecutionNotifier.java
index 2c6c8883b16164661306a2dbe0ab77a4629edb5b..09e37122d684e0443e5e3a00b22335320f463d00 100644 (file)
@@ -1,64 +1,32 @@
 package org.argeo.slc.core.process;\r
 \r
-import java.io.IOException;\r
-import java.util.Iterator;\r
 import java.util.List;\r
 \r
-import javax.xml.transform.Source;\r
-import javax.xml.transform.dom.DOMSource;\r
-\r
-import org.springframework.oxm.XmlMappingException;\r
 import org.springframework.ws.client.core.WebServiceTemplate;\r
-import org.springframework.ws.soap.SoapFaultDetail;\r
-import org.springframework.ws.soap.SoapFaultDetailElement;\r
 import org.springframework.ws.soap.client.SoapFaultClientException;\r
-import org.springframework.xml.transform.StringResult;\r
-import org.w3c.dom.Node;\r
-\r
-import com.ibm.wsdl.util.IOUtils;\r
 \r
 import org.apache.commons.logging.Log;\r
 import org.apache.commons.logging.LogFactory;\r
 \r
 import org.argeo.slc.msg.process.SlcExecutionRequest;\r
 import org.argeo.slc.msg.process.SlcExecutionStepsRequest;\r
+import org.argeo.slc.ws.client.WebServiceUtils;\r
 \r
 public class WebServiceSlcExecutionNotifier implements SlcExecutionNotifier {\r
        private WebServiceTemplate template;\r
 \r
        private Log log = LogFactory.getLog(getClass());\r
 \r
-       public void addSteps(SlcExecution slcExecution,\r
-                       List<SlcExecutionStep> additionalSteps) {\r
-               SlcExecutionStepsRequest req = new SlcExecutionStepsRequest();\r
-               req.setSlcExecutionUuid(slcExecution.getUuid());\r
-               req.setSteps(additionalSteps);\r
-               if (log.isTraceEnabled()) {\r
-                       for (SlcExecutionStep step : additionalSteps) {\r
-                               log.trace("Step " + step.getUuid() + ": " + step.logAsString());\r
-                       }\r
-               }\r
-\r
-               try {\r
-                       marshalSendAndReceive(req);\r
-                       if (log.isDebugEnabled())\r
-                               log.debug("Added steps to slc execution "\r
-                                               + slcExecution.getUuid());\r
-               } catch (SoapFaultClientException e) {\r
-                       manageSoapException(e);\r
-               }\r
-       }\r
-\r
        public void newExecution(SlcExecution slcExecution) {\r
                SlcExecutionRequest req = new SlcExecutionRequest();\r
                req.setSlcExecution(slcExecution);\r
                try {\r
-                       marshalSendAndReceive(req);\r
-                       if (log.isDebugEnabled())\r
-                               log.debug("Notified creation of slc execution "\r
+                       WebServiceUtils.marshalSendAndReceive(template, req);\r
+                       if (log.isTraceEnabled())\r
+                               log.trace("Notified creation of slc execution "\r
                                                + slcExecution.getUuid());\r
                } catch (SoapFaultClientException e) {\r
-                       manageSoapException(e);\r
+                       WebServiceUtils.manageSoapException(e);\r
                }\r
        }\r
 \r
@@ -66,55 +34,38 @@ public class WebServiceSlcExecutionNotifier implements SlcExecutionNotifier {
                SlcExecutionRequest req = new SlcExecutionRequest();\r
                req.setSlcExecution(slcExecution);\r
                try {\r
-                       marshalSendAndReceive(req);\r
-                       if (log.isDebugEnabled())\r
-                               log.debug("Notified update of slc execution "\r
+                       WebServiceUtils.marshalSendAndReceive(template, req);\r
+                       if (log.isTraceEnabled())\r
+                               log.trace("Notified update of slc execution "\r
                                                + slcExecution.getUuid());\r
                } catch (SoapFaultClientException e) {\r
-                       manageSoapException(e);\r
+                       WebServiceUtils.manageSoapException(e);\r
                }\r
        }\r
 \r
-       public void setTemplate(WebServiceTemplate template) {\r
-               this.template = template;\r
-       }\r
-\r
-       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
+       public void addSteps(SlcExecution slcExecution,\r
+                       List<SlcExecutionStep> additionalSteps) {\r
+               SlcExecutionStepsRequest req = new SlcExecutionStepsRequest();\r
+               req.setSlcExecutionUuid(slcExecution.getUuid());\r
+               req.setSteps(additionalSteps);\r
+               if (log.isTraceEnabled()) {\r
+                       for (SlcExecutionStep step : additionalSteps) {\r
+                               log.trace("Step " + step.getUuid() + ": " + step.logAsString());\r
                        }\r
+               }\r
 \r
-                       if (stack.length() > 0 && log.isTraceEnabled())\r
-                               log.error("WS root cause stack: " + stack);\r
+               try {\r
+                       WebServiceUtils.marshalSendAndReceive(template, req);\r
+                       if (log.isTraceEnabled())\r
+                               log.trace("Added steps to slc execution "\r
+                                               + slcExecution.getUuid());\r
+               } catch (SoapFaultClientException e) {\r
+                       WebServiceUtils.manageSoapException(e);\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
+       public void setTemplate(WebServiceTemplate template) {\r
+               this.template = template;\r
        }\r
+\r
 }\r