Fix bugs with slc execution notifications
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 24 Apr 2008 11:15:42 +0000 (11:15 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 24 Apr 2008 11:15:42 +0000 (11:15 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@1047 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.slc.core/pom.xml
org.argeo.slc.core/src/main/java/org/argeo/slc/ant/SlcExecutionBuildListener.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/process/WebServiceSlcExecutionNotifier.java
org.argeo.slc.core/src/main/resources/org/argeo/slc/castor/process/mapping.xml
org.argeo.slc.core/src/test/java/org/argeo/slc/core/process/SlcExecutionCastorTest.java
org.argeo.slc.core/src/test/resources/log4j.properties

index 8cadb3a65f2bf70b5871d0e315024d69109888e5..cd57095c2074c257fc7464584047ac432da2cbe5 100644 (file)
@@ -26,7 +26,8 @@
                        <plugin>
                                <groupId>org.apache.maven.plugins</groupId>
                                <artifactId>maven-compiler-plugin</artifactId>
-                       </plugin>
+                       </plugin>\r
+                       <!--  
                        <plugin>
                                <groupId>org.apache.maven.plugins</groupId>
                                <artifactId>maven-source-plugin</artifactId>
@@ -52,7 +53,8 @@
                                                </goals>
                                        </execution>
                                </executions>
-                       </plugin>
+                       </plugin>\r
+                       -->
                        <plugin>\r
                                <groupId>org.apache.maven.plugins</groupId>\r
                                <artifactId>maven-surefire-plugin</artifactId>\r
index 433d6b4b1cf331ea9192ce139422427d7050270b..7f0b30b2e2b4fa71112938b91ca2c5169d036d28 100644 (file)
@@ -12,6 +12,7 @@ import org.apache.tools.ant.Project;
 import org.argeo.slc.core.process.SlcExecution;\r
 import org.argeo.slc.core.process.SlcExecutionNotifier;\r
 import org.argeo.slc.core.process.SlcExecutionStep;\r
+import org.argeo.slc.core.process.WebServiceSlcExecutionNotifier;\r
 \r
 public class SlcExecutionBuildListener extends AppenderSkeleton implements\r
                ProjectRelatedBuildListener {\r
@@ -34,7 +35,7 @@ public class SlcExecutionBuildListener extends AppenderSkeleton implements
 \r
        public void init(Project project) {\r
                if (this.project != null) {\r
-                       throw new SlcAntException("BuildListener already initialized");\r
+                       throw new SlcAntException("Build listener already initialized");\r
                }\r
 \r
                this.project = project;\r
@@ -74,6 +75,7 @@ public class SlcExecutionBuildListener extends AppenderSkeleton implements
                        if (currentStep == null) {\r
                                currentStep = new SlcExecutionStep("LOG", event.getMessage());\r
                                notifyStep(slcExecution, currentStep);\r
+                               currentStep = null;\r
                        } else {\r
                                currentStep.addLog(event.getMessage());\r
                        }\r
@@ -193,6 +195,12 @@ public class SlcExecutionBuildListener extends AppenderSkeleton implements
                        // avoid StackOverflow if notification calls Log4j itself.\r
                        return;\r
                }\r
+\r
+               if (event.getLoggerName().equals(\r
+                               WebServiceSlcExecutionNotifier.class.getName())) {\r
+                       return;\r
+               }\r
+\r
                isLogging = true;\r
 \r
                try {\r
@@ -202,10 +210,8 @@ public class SlcExecutionBuildListener extends AppenderSkeleton implements
                                if (currentStep == null) {\r
                                        currentStep = new SlcExecutionStep("LOG", event\r
                                                        .getMessage().toString());\r
-                                       notifyStep(slcExecution, currentStep);\r
-                               } else {\r
-                                       currentStep.addLog(event.getMessage().toString());\r
                                }\r
+                               currentStep.addLog(event.getMessage().toString());\r
                        } else {\r
                                // TODO: log before initialization?\r
                        }\r
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
index a22159eb3ecab4113a95f89ae0d6e05d9b23e00c..091ca8cdfbdd5a7da31638680157dc16c010b9b5 100644 (file)
@@ -24,7 +24,8 @@
                <field name="uuid" identity="true">\r
                        <bind-xml node="attribute" />\r
                </field>\r
-               <field name="steps" collection="vector">\r
+               <field name="steps" collection="vector"\r
+                       type="org.argeo.slc.core.process.SlcExecutionStep">\r
                        <bind-xml auto-naming="deriveByClass" location="steps" />\r
                </field>\r
        </class>\r
index a9bc47e2c4a012f78dc8f7f73efc956ebdb22520..105ef79836df187a426d28cbbb1ef518d01c5bad 100644 (file)
@@ -1,6 +1,7 @@
 package org.argeo.slc.core.process;\r
 \r
 import java.io.IOException;\r
+import java.io.InputStream;\r
 import java.io.StringReader;\r
 import java.io.StringWriter;\r
 import java.text.SimpleDateFormat;\r
@@ -21,10 +22,15 @@ import org.springframework.oxm.Unmarshaller;
 public class SlcExecutionCastorTest extends AbstractSpringTestCase {\r
        private Log log = LogFactory.getLog(getClass());\r
 \r
-       public void testMarshalling() throws Exception {\r
-               Marshaller marshaller = getBean("marshaller");\r
-               Unmarshaller unmarshaller = getBean("marshaller");\r
+       private Marshaller marshaller;\r
+       private Unmarshaller unmarshaller;\r
+\r
+       public void setUp() {\r
+               marshaller = getBean("marshaller");\r
+               unmarshaller = getBean("marshaller");\r
+       }\r
 \r
+       public void testMarshalling() throws Exception {\r
                SlcExecution slcExec = SlcExecutionTestUtils.createSimpleSlcExecution();\r
 \r
                SlcExecutionRequest msgSave = new SlcExecutionRequest();\r
@@ -54,15 +60,18 @@ public class SlcExecutionCastorTest extends AbstractSpringTestCase {
 \r
                SlcExecutionRequest msgSaveUnm = unmarshall(unmarshaller, msgSaveXml);\r
                assertNotNull(msgSaveUnm);\r
-               SlcExecutionTestUtils.assertSlcExecution(slcExec, msgSaveUnm.getSlcExecution());\r
+               SlcExecutionTestUtils.assertSlcExecution(slcExec, msgSaveUnm\r
+                               .getSlcExecution());\r
 \r
                SlcExecutionStepsRequest msgNotifUnm = unmarshall(unmarshaller,\r
                                msgNotifXml);\r
                assertNotNull(msgNotifUnm);\r
                assertEquals(slcExec.getUuid(), msgNotifUnm.getSlcExecutionUuid());\r
                assertEquals(2, msgNotifUnm.getSteps().size());\r
-               SlcExecutionTestUtils.assertSlcExecutionStep(step0, msgNotifUnm.getSteps().get(0));\r
-               SlcExecutionTestUtils.assertSlcExecutionStep(step1, msgNotifUnm.getSteps().get(1));\r
+               SlcExecutionTestUtils.assertSlcExecutionStep(step0, msgNotifUnm\r
+                               .getSteps().get(0));\r
+               SlcExecutionTestUtils.assertSlcExecutionStep(step1, msgNotifUnm\r
+                               .getSteps().get(1));\r
 \r
                SlcExecution slcExecUnm = msgSaveUnm.getSlcExecution();\r
                slcExecUnm.getSteps().addAll(msgNotifUnm.getSteps());\r
@@ -70,6 +79,10 @@ public class SlcExecutionCastorTest extends AbstractSpringTestCase {
                SlcExecutionRequest msgUpdate = new SlcExecutionRequest();\r
                msgUpdate.setSlcExecution(slcExecUnm);\r
                String msgUpdateXml = marshallAndLog(marshaller, msgUpdate);\r
+               \r
+               SlcExecutionRequest msgUpdateUnm = unmarshall(unmarshaller,\r
+                               msgUpdateXml);\r
+               assertNotNull(msgUpdateUnm);\r
        }\r
 \r
        private String marshallAndLog(Marshaller marshaller, Object obj)\r
index 8eb8b0c9c86c72ddc2f5b61d305686653e16efae..4f2e333bd4820315bd99adc22f4462654a24a2b9 100644 (file)
@@ -4,6 +4,10 @@ log4j.rootLogger=INFO, console
 ## Levels\r
 # Slc\r
 log4j.logger.org.argeo.slc=DEBUG\r
+log4j.logger.org.argeo.slc.core.process=DEBUG\r
+\r
+# Castor\r
+\r
 # Spring\r
 log4j.logger.org.springframework=INFO\r
 # Hibernate\r