]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc.core/src/main/java/org/argeo/slc/core/process/WebServiceSlcExecutionNotifier.java
Fix bugs with slc execution notifications
[gpl/argeo-slc.git] / org.argeo.slc.core / src / main / java / org / argeo / slc / core / process / WebServiceSlcExecutionNotifier.java
index 2af13bda8c442a134653235ac081b404634d4c8b..2c6c8883b16164661306a2dbe0ab77a4629edb5b 100644 (file)
@@ -1,15 +1,18 @@
 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
@@ -30,8 +33,14 @@ public class WebServiceSlcExecutionNotifier implements SlcExecutionNotifier {
                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
-                       template.marshalSendAndReceive(req);\r
+                       marshalSendAndReceive(req);\r
                        if (log.isDebugEnabled())\r
                                log.debug("Added steps to slc execution "\r
                                                + slcExecution.getUuid());\r
@@ -44,7 +53,7 @@ public class WebServiceSlcExecutionNotifier implements SlcExecutionNotifier {
                SlcExecutionRequest req = new SlcExecutionRequest();\r
                req.setSlcExecution(slcExecution);\r
                try {\r
-                       template.marshalSendAndReceive(req);\r
+                       marshalSendAndReceive(req);\r
                        if (log.isDebugEnabled())\r
                                log.debug("Notified creation of slc execution "\r
                                                + slcExecution.getUuid());\r
@@ -57,9 +66,9 @@ public class WebServiceSlcExecutionNotifier implements SlcExecutionNotifier {
                SlcExecutionRequest req = new SlcExecutionRequest();\r
                req.setSlcExecution(slcExecution);\r
                try {\r
-                       template.marshalSendAndReceive(req);\r
+                       marshalSendAndReceive(req);\r
                        if (log.isDebugEnabled())\r
-                               log.debug("Notify update of slc execution "\r
+                               log.debug("Notified update of slc execution "\r
                                                + slcExecution.getUuid());\r
                } catch (SoapFaultClientException e) {\r
                        manageSoapException(e);\r
@@ -94,4 +103,18 @@ public class WebServiceSlcExecutionNotifier implements SlcExecutionNotifier {
                                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
 }\r