<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>\r
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>\r
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>\r
+ <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>\r
<classpathentry kind="output" path="target/classes"/>\r
</classpath>\r
<projects>\r
</projects>\r
<buildSpec>\r
+ <buildCommand>\r
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>\r
+ <arguments>\r
+ </arguments>\r
+ </buildCommand>\r
<buildCommand>\r
<name>org.maven.ide.eclipse.maven2Builder</name>\r
<arguments>\r
<arguments>\r
</arguments>\r
</buildCommand>\r
+ <buildCommand>\r
+ <name>org.eclipse.wst.validation.validationbuilder</name>\r
+ <arguments>\r
+ </arguments>\r
+ </buildCommand>\r
</buildSpec>\r
<natures>\r
<nature>org.eclipse.jdt.core.javanature</nature>\r
<nature>org.maven.ide.eclipse.maven2Nature</nature>\r
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>\r
+ <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>\r
+ <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>\r
</natures>\r
</projectDescription>\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<project-modules id="moduleCoreId" project-version="1.5.0">\r
+<wb-module deploy-name="org.argeo.slc.core">\r
+<wb-resource deploy-path="/" source-path="/src/main/java"/>\r
+<wb-resource deploy-path="/" source-path="/src/main/resources"/>\r
+<wb-resource deploy-path="/" source-path="/src/test/java"/>\r
+<wb-resource deploy-path="/" source-path="/src/test/resources"/>\r
+</wb-module>\r
+</project-modules>\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<faceted-project>\r
+ <fixed facet="jst.utility"/>\r
+ <fixed facet="jst.java"/>\r
+ <installed facet="jst.java" version="5.0"/>\r
+ <installed facet="jst.utility" version="1.0"/>\r
+</faceted-project>\r
--- /dev/null
+#Mon Apr 21 18:01:59 CEST 2008\r
+DELEGATES_PREFERENCE=delegateValidatorListorg.eclipse.wst.xsd.core.internal.validation.eclipse.XSDDelegatingValidator\=org.eclipse.wst.xsd.core.internal.validation.eclipse.Validator;org.eclipse.wst.wsdl.validation.internal.eclipse.WSDLDelegatingValidator\=org.eclipse.wst.wsdl.validation.internal.eclipse.Validator;\r
+USER_BUILD_PREFERENCE=enabledBuildValidatorListorg.eclipse.wst.xsd.core.internal.validation.eclipse.XSDDelegatingValidator;org.eclipse.wst.wsdl.validation.internal.eclipse.WSDLDelegatingValidator;org.eclipse.jst.jsp.core.internal.validation.JSPContentValidator;org.eclipse.wst.xml.core.internal.validation.eclipse.Validator;org.eclipse.jst.jsf.validation.internal.appconfig.AppConfigValidator;org.eclipse.wst.dtd.core.internal.validation.eclipse.Validator;org.eclipse.wst.wsi.ui.internal.WSIMessageValidator;org.eclipse.jst.jsp.core.internal.validation.JSPBatchValidator;org.eclipse.jst.jsf.validation.internal.JSPSemanticsValidator;\r
+USER_MANUAL_PREFERENCE=enabledManualValidatorListorg.eclipse.wst.xsd.core.internal.validation.eclipse.XSDDelegatingValidator;org.eclipse.wst.wsdl.validation.internal.eclipse.WSDLDelegatingValidator;org.eclipse.jst.jsp.core.internal.validation.JSPContentValidator;org.eclipse.wst.xml.core.internal.validation.eclipse.Validator;org.eclipse.jst.jsf.validation.internal.appconfig.AppConfigValidator;org.eclipse.wst.dtd.core.internal.validation.eclipse.Validator;org.eclipse.wst.wsi.ui.internal.WSIMessageValidator;org.eclipse.jst.jsp.core.internal.validation.JSPBatchValidator;org.eclipse.jst.jsf.validation.internal.JSPSemanticsValidator;\r
+USER_PREFERENCE=overrideGlobalPreferencestruedisableAllValidationfalseversion1.1.102.v200709122200\r
+eclipse.preferences.version=1\r
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
- </dependency>
+ </dependency>\r
+
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
- </dependency>
+ </dependency>\r
+ <dependency>\r
+ <groupId>org.springframework.ws</groupId>\r
+ <artifactId>spring-ws-core</artifactId>\r
+ </dependency>\r
+ <dependency>\r
+ <groupId>org.springframework.ws</groupId>\r
+ <artifactId>spring-oxm</artifactId>\r
+ </dependency>\r
+\r
+ <dependency>\r
+ <groupId>org.codehaus.castor</groupId>\r
+ <artifactId>castor</artifactId>\r
+ </dependency>\r
+ <dependency>\r
+ <groupId>xerces</groupId>\r
+ <artifactId>xercesImpl</artifactId>\r
+ </dependency>\r
+\r
+ <dependency>\r
+ <groupId>javax.xml.soap</groupId>\r
+ <artifactId>saaj-api</artifactId>\r
+ </dependency>\r
+ <dependency>\r
+ <groupId>com.sun.xml.messaging.saaj</groupId>\r
+ <artifactId>saaj-impl</artifactId>\r
+ </dependency>\r
+
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
--- /dev/null
+package org.argeo.slc.core.process;\r
+\r
+import java.util.List;\r
+import java.util.Vector;\r
+\r
+public class SlcExecution {\r
+ private String uuid;\r
+ private String host;\r
+ private String path;\r
+ private String type;\r
+ private String status;\r
+ \r
+ private List<SlcExecutionStep> steps = new Vector<SlcExecutionStep>();\r
+ \r
+ \r
+\r
+ public List<SlcExecutionStep> getSteps() {\r
+ return steps;\r
+ }\r
+\r
+ public void setSteps(List<SlcExecutionStep> steps) {\r
+ this.steps = steps;\r
+ }\r
+\r
+ public String getUuid() {\r
+ return uuid;\r
+ }\r
+\r
+ public void setUuid(String uuid) {\r
+ this.uuid = uuid;\r
+ }\r
+\r
+ public String getHost() {\r
+ return host;\r
+ }\r
+\r
+ public void setHost(String host) {\r
+ this.host = host;\r
+ }\r
+\r
+ public String getPath() {\r
+ return path;\r
+ }\r
+\r
+ public void setPath(String path) {\r
+ this.path = path;\r
+ }\r
+\r
+ public String getType() {\r
+ return type;\r
+ }\r
+\r
+ public void setType(String type) {\r
+ this.type = type;\r
+ }\r
+\r
+ public String getStatus() {\r
+ return status;\r
+ }\r
+\r
+ public void setStatus(String status) {\r
+ this.status = status;\r
+ }\r
+\r
+}\r
--- /dev/null
+package org.argeo.slc.core.process;\r
+\r
+import java.io.IOException;\r
+import java.io.StringReader;\r
+import java.io.StringWriter;\r
+import java.util.Date;\r
+import java.util.List;\r
+import java.util.Vector;\r
+\r
+import org.apache.commons.io.IOUtils;\r
+\r
+public class SlcExecutionStep {\r
+ private String type;\r
+ private Date begin;\r
+ private List<String> logLines = new Vector<String>();\r
+\r
+ public String getType() {\r
+ return type;\r
+ }\r
+\r
+ public void setType(String type) {\r
+ this.type = type;\r
+ }\r
+\r
+ public Date getBegin() {\r
+ return begin;\r
+ }\r
+\r
+ public void setBegin(Date begin) {\r
+ this.begin = begin;\r
+ }\r
+\r
+ public List<String> getLogLines() {\r
+ return logLines;\r
+ }\r
+\r
+ public void setLogLines(List<String> logLines) {\r
+ this.logLines = logLines;\r
+ }\r
+\r
+ public String logAsString() {\r
+ StringWriter writer = new StringWriter();\r
+ String log = writer.toString();\r
+ IOUtils.closeQuietly(writer);\r
+ return log;\r
+ }\r
+\r
+ public void addLog(String log) {\r
+ try {\r
+ List<String> lines = IOUtils.readLines(new StringReader(log));\r
+ logLines.addAll(lines);\r
+ } catch (IOException e) {\r
+ throw new RuntimeException("Cannot add log", e);\r
+ }\r
+ }\r
+\r
+}\r
--- /dev/null
+package org.argeo.slc.msg.process;
+
+import org.argeo.slc.core.process.SlcExecution;
+
+public class SlcExecutionRequest {
+ private SlcExecution slcExecution;
+
+ public SlcExecution getSlcExecution() {
+ return slcExecution;
+ }
+
+ public void setSlcExecution(SlcExecution slcExecution) {
+ this.slcExecution = slcExecution;
+ }
+
+}
--- /dev/null
+package org.argeo.slc.msg.process;\r
+\r
+import java.util.List;\r
+import java.util.Vector;\r
+\r
+import org.argeo.slc.core.process.SlcExecutionStep;\r
+\r
+public class SlcExecutionStepsRequest {\r
+ private String slcExecutionUuid;\r
+ private List<SlcExecutionStep> steps = new Vector<SlcExecutionStep>();\r
+\r
+ public String getSlcExecutionUuid() {\r
+ return slcExecutionUuid;\r
+ }\r
+\r
+ public void setSlcExecutionUuid(String slcExecutionUuid) {\r
+ this.slcExecutionUuid = slcExecutionUuid;\r
+ }\r
+\r
+ public List<SlcExecutionStep> getSteps() {\r
+ return steps;\r
+ }\r
+\r
+ public void setSteps(List<SlcExecutionStep> step) {\r
+ this.steps = step;\r
+ }\r
+\r
+ public void addStep(SlcExecutionStep step) {\r
+ steps.add(step);\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0"?>
+
+<!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN" "http://castor.org/mapping.dtd">
+
+<mapping>
+ <description>Process objects XML mapping</description>
+
+ <class name="org.argeo.slc.msg.process.SlcExecutionStepsRequest"
+ auto-complete="true">
+ <map-to ns-uri="http://argeo.org/projects/slc/schemas" />
+ <field name="steps" collection="vector"
+ type="org.argeo.slc.core.process.SlcExecutionStep">
+ <bind-xml auto-naming="deriveByClass" location="steps" />
+ </field>
+ </class>
+
+ <class name="org.argeo.slc.msg.process.SlcExecutionRequest"
+ auto-complete="true">
+ <map-to ns-uri="http://argeo.org/projects/slc/schemas" />
+ </class>
+
+ <class name="org.argeo.slc.core.process.SlcExecution"
+ auto-complete="true">
+ <field name="uuid" identity="true">
+ <bind-xml node="attribute" />
+ </field>
+ <field name="steps" collection="vector">
+ <bind-xml auto-naming="deriveByClass" location="steps" />
+ </field>
+ </class>
+
+ <class name="org.argeo.slc.core.process.SlcExecutionStep"
+ auto-complete="true">
+ <field name="logLines" collection="vector" type="string">
+ <bind-xml name="log-line" location="log-lines" />
+ </field>
+ </class>
+</mapping>
\ No newline at end of file
--- /dev/null
+package org.argeo.slc.core.process;\r
+\r
+import java.io.IOException;\r
+import java.io.StringReader;\r
+import java.io.StringWriter;\r
+import java.text.SimpleDateFormat;\r
+import java.util.UUID;\r
+\r
+import javax.xml.transform.stream.StreamResult;\r
+import javax.xml.transform.stream.StreamSource;\r
+\r
+import org.apache.commons.io.IOUtils;\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import org.argeo.slc.msg.process.SlcExecutionRequest;\r
+import org.argeo.slc.msg.process.SlcExecutionStepsRequest;\r
+import org.argeo.slc.unit.AbstractSpringTestCase;\r
+import org.springframework.oxm.Marshaller;\r
+import org.springframework.oxm.Unmarshaller;\r
+\r
+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
+\r
+ SlcExecution slcExec = createSimpleSlcExecution();\r
+\r
+ SlcExecutionRequest msgSave = new SlcExecutionRequest();\r
+ msgSave.setSlcExecution(slcExec);\r
+\r
+ String msgSaveXml = marshallAndLog(marshaller, msgSave);\r
+\r
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");\r
+ SlcExecutionStep step0 = new SlcExecutionStep();\r
+ step0.setBegin(sdf.parse("2008-04-17 18:21"));\r
+ step0.setType("LOG");\r
+ step0.addLog("A log message\nand another line");\r
+\r
+ SlcExecutionStep step1 = new SlcExecutionStep();\r
+ step1.setBegin(sdf.parse("2008-04-17 18:25"));\r
+ step1.setType("LOG");\r
+ step1.addLog("A nother log message");\r
+\r
+ SlcExecutionStepsRequest msgNotif = new SlcExecutionStepsRequest();\r
+ msgNotif.addStep(step0);\r
+ msgNotif.addStep(step1);\r
+ msgNotif.setSlcExecutionUuid(slcExec.getUuid());\r
+\r
+ String msgNotifXml = marshallAndLog(marshaller, msgNotif);\r
+\r
+ SlcExecutionRequest msgSaveUnm = unmarshall(unmarshaller, msgSaveXml);\r
+ assertNotNull(msgSaveUnm);\r
+ assertSlcExecution(slcExec, msgSaveUnm.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
+ assertSlcExecutionStep(step0, msgNotifUnm.getSteps().get(0));\r
+ assertSlcExecutionStep(step1, msgNotifUnm.getSteps().get(1));\r
+\r
+ SlcExecution slcExecUnm = msgSaveUnm.getSlcExecution();\r
+ slcExecUnm.getSteps().addAll(msgNotifUnm.getSteps());\r
+\r
+ SlcExecutionRequest msgUpdate = new SlcExecutionRequest();\r
+ msgUpdate.setSlcExecution(slcExecUnm);\r
+ String msgUpdateXml = marshallAndLog(marshaller, msgUpdate);\r
+ }\r
+\r
+ private String marshallAndLog(Marshaller marshaller, Object obj)\r
+ throws IOException {\r
+ StringWriter writer = new StringWriter();\r
+ marshaller.marshal(obj, new StreamResult(writer));\r
+ String xml = writer.toString();\r
+ log.info(xml);\r
+ IOUtils.closeQuietly(writer);\r
+ return xml;\r
+ }\r
+\r
+ private <T> T unmarshall(Unmarshaller unmarshaller, String xml)\r
+ throws IOException {\r
+ StringReader reader = new StringReader(xml);\r
+ Object obj = unmarshaller.unmarshal(new StreamSource(reader));\r
+ IOUtils.closeQuietly(reader);\r
+ return (T) obj;\r
+ }\r
+\r
+ private void assertSlcExecution(SlcExecution expected, SlcExecution reached) {\r
+ assertNotNull(reached);\r
+ assertEquals(expected.getHost(), reached.getHost());\r
+ assertEquals(expected.getPath(), reached.getPath());\r
+ assertEquals(expected.getType(), reached.getType());\r
+ assertEquals(expected.getStatus(), reached.getStatus());\r
+ }\r
+\r
+ private void assertSlcExecutionStep(SlcExecutionStep expected,\r
+ SlcExecutionStep reached) {\r
+ assertNotNull(reached);\r
+ assertEquals(expected.getType(), reached.getType());\r
+ assertEquals(expected.logAsString(), reached.logAsString());\r
+ assertEquals(expected.getBegin(), reached.getBegin());\r
+ }\r
+\r
+ public static SlcExecution createSimpleSlcExecution() {\r
+ SlcExecution slcExec = new SlcExecution();\r
+ slcExec.setUuid(UUID.randomUUID().toString());\r
+ slcExec.setHost("localhost");\r
+ slcExec.setPath("/test");\r
+ slcExec.setType("slcAnt");\r
+ slcExec.setStatus("STARTED");\r
+ return slcExec;\r
+ }\r
+}\r
--- /dev/null
+package org.argeo.slc.core.process;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.slc.msg.process.SlcExecutionRequest;
+import org.argeo.slc.unit.AbstractSpringTestCase;
+import org.springframework.ws.client.core.WebServiceTemplate;
+
+public class SlcExecutionWsIntegrationTest extends AbstractSpringTestCase {
+ private Log log = LogFactory.getLog(getClass());
+
+ public void testSendSlcExecutionrequest() {
+ WebServiceTemplate template = getBean("webServiceTemplate");
+ SlcExecution slcExec = SlcExecutionCastorTest
+ .createSimpleSlcExecution();
+
+ SlcExecutionRequest req = new SlcExecutionRequest();
+ req.setSlcExecution(slcExec);
+
+ log.info("Send SlcExecutionRequest for SlcExecution "
+ + slcExec.getUuid());
+
+ Object resp = template.marshalSendAndReceive(req);
+ log.info("Resp: " + resp);
+ }
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
+
+ <bean id="marshaller"
+ class="org.springframework.oxm.castor.CastorMarshaller">
+ <property name="mappingLocation"
+ value="classpath:org/argeo/slc/castor/process/mapping.xml" />
+ </bean>
+
+ <bean id="messageFactory"
+ class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory" />
+
+ <bean id="webServiceTemplate"
+ class="org.springframework.ws.client.core.WebServiceTemplate">
+ <constructor-arg ref="messageFactory" />
+ <property name="marshaller" ref="marshaller"/>
+ <property name="unmarshaller" ref="marshaller"/>
+ <property name="defaultUri"
+ value="http://localhost:8080/org.argeo.slc.webapp/slcService/" />
+ </bean>
+
+</beans>
\ No newline at end of file