]> git.argeo.org Git - gpl/argeo-slc.git/commitdiff
Improve error management:
authorMathieu Baudier <mbaudier@argeo.org>
Fri, 3 Oct 2008 08:43:43 +0000 (08:43 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Fri, 3 Oct 2008 08:43:43 +0000 (08:43 +0000)
- register in collection the first result part
- catches errors in slc.test executions
- improve web display of errors

git-svn-id: https://svn.argeo.org/slc/trunk@1689 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.slc.core/pom.xml
org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/BasicTestDefinition.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/tree/TreeTestResult.java
org.argeo.slc.core/src/main/java/org/argeo/slc/dao/test/tree/TreeTestResultDao.java
org.argeo.slc.core/src/main/java/org/argeo/slc/msg/test/tree/CreateTreeTestResultRequest.java
org.argeo.slc.core/src/main/java/org/argeo/slc/msg/test/tree/ResultPartRequest.java
org.argeo.slc.core/src/main/resources/org/argeo/slc/castor/msg/mapping.xml
org.argeo.slc.core/src/main/resources/org/argeo/slc/castor/test/mapping.xml
org.argeo.slc.core/src/main/resources/org/argeo/slc/core/test/spring/applicationContext.xml
org.argeo.slc.core/src/main/resources/org/argeo/slc/xml/slc.xsd

index 61da5f740e88aeef8a72562ea3f1f8808451627c..513110c97c9395cbb4e796de4e5bca41f957bbb9 100644 (file)
@@ -45,7 +45,6 @@
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-context</artifactId>
-            <version>2.0.8</version>
         </dependency>
         <dependency>
             <groupId>org.springframework.ws</groupId>
index 1178b41ec55e962e249ed3b0805dc2a144921a21..4d62ba39db652c734c778ef46df07a75d0b01af9 100644 (file)
@@ -1,5 +1,6 @@
 package org.argeo.slc.core.test;\r
 \r
+import org.argeo.slc.core.SlcException;\r
 import org.argeo.slc.core.structure.tree.TreeSRelatedHelper;\r
 import org.argeo.slc.core.test.context.ContextAware;\r
 import org.argeo.slc.core.test.context.ContextUtils;\r
@@ -31,6 +32,8 @@ public class BasicTestDefinition extends TreeSRelatedHelper implements
                        TestData testData = testRun.getTestData();\r
                        ContextUtils.compareReachedExpected((ContextAware) testData,\r
                                        testRun.getTestResult(), this);\r
+               } else {\r
+                       throw new SlcException("No test data defined.");\r
                }\r
        }\r
 }\r
index 3e365afe0822c6f28b51f3f835d89189a6fd7328..0c3eea382986d962f9af0be9d36143be5599d590 100644 (file)
@@ -44,7 +44,7 @@ public class TreeTestResult implements TestResult, StructureAware<TreeSPath>,
        private SortedMap<TreeSPath, PartSubList> resultParts = new TreeMap<TreeSPath, PartSubList>();\r
        private SortedMap<TreeSPath, StructureElement> elements = new TreeMap<TreeSPath, StructureElement>();\r
 \r
-       private Map<String, String> attributes = new TreeMap<String, String>();\r
+       private SortedMap<String, String> attributes = new TreeMap<String, String>();\r
 \r
        /** Sets the list of listeners. */\r
        public void setListeners(List<TestResultListener<TreeTestResult>> listeners) {\r
@@ -204,11 +204,11 @@ public class TreeTestResult implements TestResult, StructureAware<TreeSPath>,
                }\r
        }\r
 \r
-       public Map<String, String> getAttributes() {\r
+       public SortedMap<String, String> getAttributes() {\r
                return attributes;\r
        }\r
 \r
-       public void setAttributes(Map<String, String> attributes) {\r
+       public void setAttributes(SortedMap<String, String> attributes) {\r
                this.attributes = attributes;\r
        }\r
 \r
index 49984e114f15897c418e0639fe519598e2001df8..e7582a869b6606ddc8e00c5699445983d97d6434 100644 (file)
@@ -2,6 +2,7 @@ package org.argeo.slc.dao.test.tree;
 \r
 import java.util.List;\r
 import java.util.Map;\r
+import java.util.SortedMap;\r
 \r
 import org.argeo.slc.core.structure.StructureElement;\r
 import org.argeo.slc.core.structure.tree.TreeSPath;\r
@@ -16,4 +17,7 @@ public interface TreeTestResultDao extends TestResultDao<TreeTestResult> {
        public void addResultPart(String testResultId, TreeSPath path,\r
                        SimpleResultPart resultPart,\r
                        Map<TreeSPath, StructureElement> relatedElements);\r
+\r
+       public void updateAttributes(String testResultId,\r
+                       SortedMap<String, String> attributes);\r
 }\r
index e11ef0407f9772b7b4779c8d5413e340643da8c1..0bac8a821b744b7ffca7afce953a476bb4da9dbb 100644 (file)
@@ -1,9 +1,11 @@
 package org.argeo.slc.msg.test.tree;\r
 \r
+import org.argeo.slc.core.test.TestRunDescriptor;\r
 import org.argeo.slc.core.test.tree.TreeTestResult;\r
 \r
 public class CreateTreeTestResultRequest {\r
        private TreeTestResult treeTestResult;\r
+       private TestRunDescriptor testRunDescriptor;\r
 \r
        public CreateTreeTestResultRequest() {\r
 \r
@@ -11,6 +13,9 @@ public class CreateTreeTestResultRequest {
 \r
        public CreateTreeTestResultRequest(TreeTestResult treeTestResult) {\r
                this.treeTestResult = treeTestResult;\r
+               if (treeTestResult.getCurrentTestRun() != null)\r
+                       testRunDescriptor = new TestRunDescriptor(treeTestResult\r
+                                       .getCurrentTestRun());\r
        }\r
 \r
        public TreeTestResult getTreeTestResult() {\r
@@ -21,6 +26,14 @@ public class CreateTreeTestResultRequest {
                this.treeTestResult = treeTestResult;\r
        }\r
 \r
+       public TestRunDescriptor getTestRunDescriptor() {\r
+               return testRunDescriptor;\r
+       }\r
+\r
+       public void setTestRunDescriptor(TestRunDescriptor testRunDescriptor) {\r
+               this.testRunDescriptor = testRunDescriptor;\r
+       }\r
+\r
        @Override\r
        public String toString() {\r
                return getClass().getSimpleName() + "#" + treeTestResult.getUuid();\r
index 7e3750ea913b75c68db197cf15d9c7a7329fab32..09acea56a3da2721e2412c61c05d240a173b3c7a 100644 (file)
@@ -1,6 +1,7 @@
 package org.argeo.slc.msg.test.tree;\r
 \r
 import java.util.Map;\r
+import java.util.SortedMap;\r
 \r
 import org.argeo.slc.core.SlcException;\r
 import org.argeo.slc.core.structure.StructureElement;\r
@@ -16,6 +17,7 @@ public class ResultPartRequest {
        private TreeSPath path;\r
        private Map<TreeSPath, StructureElement> relatedElements;\r
        private TestRunDescriptor testRunDescriptor;\r
+       private SortedMap<String, String> attributes;\r
 \r
        public ResultPartRequest() {\r
 \r
@@ -29,6 +31,7 @@ public class ResultPartRequest {
                relatedElements = ttr.getRelatedElements(this.path);\r
                if (ttr.getCurrentTestRun() != null)\r
                        testRunDescriptor = new TestRunDescriptor(ttr.getCurrentTestRun());\r
+               attributes = ttr.getAttributes();\r
        }\r
 \r
        public ResultPartRequest(TreeTestResult ttr) {\r
@@ -89,6 +92,14 @@ public class ResultPartRequest {
                this.relatedElements = relatedElements;\r
        }\r
 \r
+       public SortedMap<String, String> getAttributes() {\r
+               return attributes;\r
+       }\r
+\r
+       public void setAttributes(SortedMap<String, String> attributes) {\r
+               this.attributes = attributes;\r
+       }\r
+\r
        @Override\r
        public String toString() {\r
                return getClass().getSimpleName() + "#" + resultUuid + " " + path;\r
index f695f9573d2fe98cbe0ade40a407878e3e5b8e04..98517081c43073c6f236606b842993ece60362b1 100644 (file)
@@ -1,82 +1,99 @@
-<?xml version="1.0"?>\r
-\r
-<mapping>\r
-       <description>Message objects XML mapping</description>\r
-\r
-       <!-- TESTS -->\r
-       <class\r
-               name="org.argeo.slc.msg.test.tree.CreateTreeTestResultRequest">\r
-               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
-                       ns-prefix="slc" />\r
-               <field name="treeTestResult"\r
-                       type="org.argeo.slc.core.test.tree.TreeTestResult" />\r
-       </class>\r
-\r
-       <class\r
-               name="org.argeo.slc.msg.test.tree.CloseTreeTestResultRequest">\r
-               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
-                       ns-prefix="slc" />\r
-               <field name="resultUuid" />\r
-               <field name="closeDate" />\r
-       </class>\r
-\r
-       <class name="org.argeo.slc.msg.test.tree.ResultPartRequest">\r
-               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
-                       ns-prefix="slc" />\r
-               <field name="resultUuid" />\r
-               <field name="resultPart"\r
-                       type="org.argeo.slc.core.test.SimpleResultPart">\r
-                       <bind-xml auto-naming="deriveByClass" />\r
-               </field>\r
-\r
-               <field name="relatedElements" collection="map">\r
-                       <bind-xml name="element" location="related-elements">\r
-                               <class name="org.exolab.castor.mapping.MapItem">\r
-                                       <map-to\r
-                                               ns-uri="http://argeo.org/projects/slc/schemas" ns-prefix="slc" />\r
-                                       <field name="key"\r
-                                               type="org.argeo.slc.core.structure.tree.TreeSPath"\r
-                                               handler="org.argeo.slc.castor.structure.tree.TreeSPathFieldHandler">\r
-                                               <bind-xml name="path" node="attribute" />\r
-                                       </field>\r
-                                       <field name="value"\r
-                                               type="org.argeo.slc.core.structure.SimpleSElement">\r
-                                               <bind-xml auto-naming="deriveByClass" />\r
-                                       </field>\r
-                               </class>\r
-                       </bind-xml>\r
-               </field>\r
-               <field name="path">\r
-                       <bind-xml auto-naming="deriveByClass" />\r
-               </field>\r
-               <field name="testRunDescriptor" />\r
-       </class>\r
-\r
-\r
-       <!-- PROCESS -->\r
-       <class name="org.argeo.slc.msg.process.SlcExecutionStepsRequest">\r
-               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
-                       ns-prefix="slc" />\r
-               <field name="slcExecutionUuid" />\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
-\r
-       <class name="org.argeo.slc.msg.process.SlcExecutionStatusRequest">\r
-               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
-                       ns-prefix="slc" />\r
-               <field name="slcExecutionUuid" />\r
-               <field name="newStatus"/>\r
-       </class>\r
-\r
-       <class name="org.argeo.slc.msg.process.SlcExecutionRequest">\r
-               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
-                       ns-prefix="slc" />\r
-               <field name="slcExecution"\r
-                       type="org.argeo.slc.core.process.SlcExecution" />\r
-       </class>\r
-\r
-\r
+<?xml version="1.0"?>
+
+<mapping>
+    <description>Message objects XML mapping</description>
+
+    <!-- TESTS -->
+    <class
+        name="org.argeo.slc.msg.test.tree.CreateTreeTestResultRequest">
+        <map-to ns-uri="http://argeo.org/projects/slc/schemas"
+            ns-prefix="slc" />
+        <field name="treeTestResult"
+            type="org.argeo.slc.core.test.tree.TreeTestResult" />
+        <field name="testRunDescriptor" />
+    </class>
+
+    <class
+        name="org.argeo.slc.msg.test.tree.CloseTreeTestResultRequest">
+        <map-to ns-uri="http://argeo.org/projects/slc/schemas"
+            ns-prefix="slc" />
+        <field name="resultUuid" />
+        <field name="closeDate" />
+    </class>
+
+    <class name="org.argeo.slc.msg.test.tree.ResultPartRequest">
+        <map-to ns-uri="http://argeo.org/projects/slc/schemas"
+            ns-prefix="slc" />
+        <field name="resultUuid" />
+        <field name="resultPart"
+            type="org.argeo.slc.core.test.SimpleResultPart">
+            <bind-xml auto-naming="deriveByClass" />
+        </field>
+
+        <field name="relatedElements" collection="map">
+            <bind-xml name="element" location="related-elements">
+                <class name="org.exolab.castor.mapping.MapItem">
+                    <map-to
+                        ns-uri="http://argeo.org/projects/slc/schemas"
+                        ns-prefix="slc" />
+                    <field name="key"
+                        type="org.argeo.slc.core.structure.tree.TreeSPath"
+                        handler="org.argeo.slc.castor.structure.tree.TreeSPathFieldHandler">
+                        <bind-xml name="path" node="attribute" />
+                    </field>
+                    <field name="value"
+                        type="org.argeo.slc.core.structure.SimpleSElement">
+                        <bind-xml auto-naming="deriveByClass" />
+                    </field>
+                </class>
+            </bind-xml>
+        </field>
+        <field name="path">
+            <bind-xml auto-naming="deriveByClass" />
+        </field>
+        <field name="testRunDescriptor" />
+        <field name="attributes" collection="sortedmap">
+            <bind-xml name="attribute" location="attributes">
+                <class name="org.exolab.castor.mapping.MapItem">
+                    <map-to
+                        ns-uri="http://argeo.org/projects/slc/schemas"
+                        ns-prefix="slc" />
+                    <field name="key" type="string">
+                        <bind-xml name="name" node="attribute" />
+                    </field>
+                    <field name="value" type="string">
+                        <bind-xml node="text" />
+                    </field>
+                </class>
+            </bind-xml>
+        </field>
+    </class>
+
+
+    <!-- PROCESS -->
+    <class name="org.argeo.slc.msg.process.SlcExecutionStepsRequest">
+        <map-to ns-uri="http://argeo.org/projects/slc/schemas"
+            ns-prefix="slc" />
+        <field name="slcExecutionUuid" />
+        <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.SlcExecutionStatusRequest">
+        <map-to ns-uri="http://argeo.org/projects/slc/schemas"
+            ns-prefix="slc" />
+        <field name="slcExecutionUuid" />
+        <field name="newStatus" />
+    </class>
+
+    <class name="org.argeo.slc.msg.process.SlcExecutionRequest">
+        <map-to ns-uri="http://argeo.org/projects/slc/schemas"
+            ns-prefix="slc" />
+        <field name="slcExecution"
+            type="org.argeo.slc.core.process.SlcExecution" />
+    </class>
+
+
 </mapping>
\ No newline at end of file
index e35450e16e662a54b5f3858364ecdc427390c38f..f6dfbf984db5f5a889773601ec0dfddf7119cd32 100644 (file)
@@ -22,7 +22,7 @@
                        <bind-xml name="uuid" node="attribute" />
                </field>
                <field name="closeDate" />
-               <field name="attributes" collection="map">
+               <field name="attributes" collection="sortedmap">
                        <bind-xml name="attribute" location="attributes">
                                <class name="org.exolab.castor.mapping.MapItem">
                                        <map-to
@@ -36,7 +36,7 @@
                                </class>
                        </bind-xml>
                </field>
-               <field name="resultParts" collection="map">
+               <field name="resultParts" collection="sortedmap">
                        <bind-xml name="result-part" location="result-parts">
                                <class name="org.exolab.castor.mapping.MapItem">
                                        <map-to
@@ -53,7 +53,7 @@
                                </class>
                        </bind-xml>
                </field>
-               <field name="elements" collection="map">
+               <field name="elements" collection="sortedmap">
                        <bind-xml name="element" location="elements">
                                <class name="org.exolab.castor.mapping.MapItem">
                                        <map-to
index 91ce574828cf17fa3c8be47d5587280aa6827dbf..20c821401fc56ef375b24afc97fc2ac40158839c 100644 (file)
@@ -1,43 +1,45 @@
 <?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.5.xsd"
-       default-lazy-init="true">
+    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.5.xsd"
+    default-lazy-init="true">
 
-       <bean id="slcDefault.test.resultLogger"
-               class="org.argeo.slc.core.test.tree.TreeTestResultLogger">
-       </bean>
+    <bean id="slcDefault.test.resultLogger"
+        class="org.argeo.slc.core.test.tree.TreeTestResultLogger">
+    </bean>
 
-       <bean name="slcDefault.test.testRun"
-               class="org.argeo.slc.core.test.SimpleTestRun">
-       </bean>
+    <bean name="slcDefault.test.testRun"
+        class="org.argeo.slc.core.test.SimpleTestRun"
+        scope="prototype">
+    </bean>
 
-       <bean name="slcDefault.test.uuid" class="java.util.UUID"
-               factory-method="randomUUID" scope="prototype">
-       </bean>
+    <bean name="slcDefault.test.uuid" class="java.util.UUID"
+        factory-method="randomUUID" scope="prototype">
+    </bean>
 
-       <bean id="slcDefault.test.basicTreeTestResult"
-               class="org.argeo.slc.core.test.tree.TreeTestResult" abstract="true"
-               destroy-method="close">
-               <property name="uuid">
-                       <bean factory-bean="slcDefault.test.uuid"
-                               factory-method="toString">
-                       </bean>
-               </property>
-               <property name="listeners">
-                       <list>
-                               <ref bean="slcDefault.test.resultLogger" />
-                       </list>
-               </property>
-       </bean>
+    <bean id="slcDefault.test.basicTreeTestResult"
+        class="org.argeo.slc.core.test.tree.TreeTestResult"
+        abstract="true" destroy-method="close">
+        <property name="uuid">
+            <bean factory-bean="slcDefault.test.uuid"
+                factory-method="toString">
+            </bean>
+        </property>
+        <property name="listeners">
+            <list>
+                <ref bean="slcDefault.test.resultLogger" />
+            </list>
+        </property>
+    </bean>
 
-       <bean id="slcDefault.test.basicSimpleTestResult"
-               class="org.argeo.slc.core.test.SimpleTestResult" abstract="true">
-               <property name="uuid">
-                       <bean factory-bean="slcDefault.test.uuid"
-                               factory-method="toString">
-                       </bean>
-               </property>
-       </bean>
+    <bean id="slcDefault.test.basicSimpleTestResult"
+        class="org.argeo.slc.core.test.SimpleTestResult"
+        abstract="true">
+        <property name="uuid">
+            <bean factory-bean="slcDefault.test.uuid"
+                factory-method="toString">
+            </bean>
+        </property>
+    </bean>
 
 </beans>
\ No newline at end of file
index 4be18ff74a22090ae37eaa72e7b977d3de4c74eb..5b7b43e151c99fdd8cb2fe4c53fa666d4b82dd13 100644 (file)
 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
-       xmlns:slc="http://argeo.org/projects/slc/schemas"
-       elementFormDefault="qualified"
-       targetNamespace="http://argeo.org/projects/slc/schemas">
-       <!-- TREE TEST RESULT -->
-       <xs:element name="tree-test-result" type="slc:TreeTestResultType" />
-       <xs:element name="tree-test-result-collection"
-               type="slc:TreeTestResultCollectionType" />
+    xmlns:slc="http://argeo.org/projects/slc/schemas"
+    elementFormDefault="qualified"
+    targetNamespace="http://argeo.org/projects/slc/schemas">
+    <!-- TREE TEST RESULT -->
+    <xs:element name="tree-test-result" type="slc:TreeTestResultType" />
+    <xs:element name="tree-test-result-collection"
+        type="slc:TreeTestResultCollectionType" />
 
-       <xs:complexType name="TreeTestResultCollectionType">
-               <xs:all>
-                       <xs:element name="results" minOccurs="0"
-                               type="slc:ResultsType" />
-               </xs:all>
-               <xs:attribute name="id" use="required" />
-       </xs:complexType>
-       <xs:complexType name="ResultsType">
-               <xs:sequence>
-                       <xs:element name="tree-test-result"
-                               type="slc:TreeTestResultType" minOccurs="0" maxOccurs="unbounded">
-                       </xs:element>
-               </xs:sequence>
-       </xs:complexType>
-       <xs:complexType name="TreeTestResultType">
-               <xs:all>
-                       <xs:element name="close-date" type="xs:dateTime"
-                               minOccurs="0" />
-                       <xs:element name="attributes" minOccurs="0"
-                               type="slc:AttributesType" />
-                       <xs:element name="result-parts" minOccurs="0"
-                               type="slc:ResultPartsType" />
-                       <xs:element name="elements" minOccurs="0"
-                               type="slc:ElementsType" />
-               </xs:all>
-               <xs:attribute name="uuid" use="required" />
-       </xs:complexType>
-       <xs:complexType name="ResultPartsType">
-               <xs:sequence>
-                       <xs:element name="result-part" type="slc:ResultPartType"
-                               minOccurs="0" maxOccurs="unbounded">
-                       </xs:element>
-               </xs:sequence>
-       </xs:complexType>
-       <xs:complexType name="ResultPartType">
-               <xs:all>
-                       <xs:element name="part-sub-list" type="slc:PartSubListType" />
-               </xs:all>
-               <xs:attribute name="path" type="xs:string" use="required" />
-       </xs:complexType>
-       <xs:complexType name="PartSubListType">
-               <xs:all>
-                       <xs:element name="parts" minOccurs="0" type="slc:PartsType" />
-               </xs:all>
-       </xs:complexType>
-       <xs:complexType name="PartsType">
-               <xs:sequence>
-                       <xs:element name="simple-result-part"
-                               type="slc:SimpleResultPartType" maxOccurs="unbounded">
-                       </xs:element>
-               </xs:sequence>
-       </xs:complexType>
-       <xs:complexType name="SimpleResultPartType">
-               <xs:all>
-                       <xs:element name="status">
-                               <xs:simpleType>
-                                       <xs:restriction base="xs:string">
-                                               <xs:enumeration value="PASSED" />
-                                               <xs:enumeration value="FAILED" />
-                                               <xs:enumeration value="ERROR" />
-                                       </xs:restriction>
-                               </xs:simpleType>
-                       </xs:element>
-                       <xs:element name="message" type="xs:string" />
-                       <xs:element name="exception-message" minOccurs="0"
-                               type="xs:string" />
-                       <xs:element name="stack-lines" minOccurs="0"
-                               type="slc:StackLinesType" />
-                       <xs:element name="test-run-uuid" type="xs:string"
-                               minOccurs="0" />
-               </xs:all>
-       </xs:complexType>
-       <xs:complexType name="StackLinesType">
-               <xs:sequence>
-                       <xs:element name="stack-line" maxOccurs="unbounded"
-                               type="xs:string" />
-               </xs:sequence>
-               <xs:attribute name="message" type="xs:string" />
-       </xs:complexType>
-       <xs:complexType name="ElementsType">
-               <xs:sequence>
-                       <xs:element name="element" type="slc:ElementType"
-                               minOccurs="0" maxOccurs="unbounded">
-                       </xs:element>
-               </xs:sequence>
-       </xs:complexType>
-       <xs:complexType name="ElementType">
-               <xs:all>
-                       <xs:element name="simple-sElement"
-                               type="slc:SimpleSElementType" />
-               </xs:all>
-               <xs:attribute name="path" type="xs:string" use="required" />
-       </xs:complexType>
-       <xs:complexType name="SimpleSElementType">
-               <xs:all>
-                       <xs:element name="label" type="xs:string" />
-                       <xs:element name="tags" type="slc:TagsType" minOccurs="0" />
-               </xs:all>
-       </xs:complexType>
-       <xs:complexType name="TagsType">
-               <xs:sequence>
-                       <xs:element name="tag" type="slc:TagType" minOccurs="0"
-                               maxOccurs="unbounded">
-                       </xs:element>
-               </xs:sequence>
-       </xs:complexType>
-       <xs:complexType name="TagType">
-               <xs:all>
-                       <xs:element name="tag-value" type="xs:string" />
-               </xs:all>
-               <xs:attribute name="name" type="xs:string" use="required" />
-       </xs:complexType>
-       <xs:complexType name="TreeSPathType">
-               <xs:attribute name="as-unique-string" type="xs:string"
-                       use="required" />
-       </xs:complexType>
-       <xs:complexType name="TestRunDescriptorType">
-               <xs:all>
-                       <xs:element name="test-run-uuid" type="xs:string" />
-                       <xs:element name="slc-execution-uuid" type="xs:string"
-                               minOccurs="0" />
-                       <xs:element name="slc-execution-step-uuid" type="xs:string"
-                               minOccurs="0" />
-                       <xs:element name="deployed-sytem-id" type="xs:string"
-                               minOccurs="0" />
-                       <xs:element name="test-result-uuid" type="xs:string"
-                               minOccurs="0" />
-               </xs:all>
-       </xs:complexType>
+    <xs:complexType name="TreeTestResultCollectionType">
+        <xs:all>
+            <xs:element name="results" minOccurs="0"
+                type="slc:ResultsType" />
+        </xs:all>
+        <xs:attribute name="id" use="required" />
+    </xs:complexType>
+    <xs:complexType name="ResultsType">
+        <xs:sequence>
+            <xs:element name="tree-test-result"
+                type="slc:TreeTestResultType" minOccurs="0"
+                maxOccurs="unbounded">
+            </xs:element>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="TreeTestResultType">
+        <xs:all>
+            <xs:element name="close-date" type="xs:dateTime"
+                minOccurs="0" />
+            <xs:element name="attributes" minOccurs="0"
+                type="slc:AttributesType" />
+            <xs:element name="result-parts" minOccurs="0"
+                type="slc:ResultPartsType" />
+            <xs:element name="elements" minOccurs="0"
+                type="slc:ElementsType" />
+        </xs:all>
+        <xs:attribute name="uuid" use="required" />
+    </xs:complexType>
+    <xs:complexType name="ResultPartsType">
+        <xs:sequence>
+            <xs:element name="result-part" type="slc:ResultPartType"
+                minOccurs="0" maxOccurs="unbounded">
+            </xs:element>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="ResultPartType">
+        <xs:all>
+            <xs:element name="part-sub-list" type="slc:PartSubListType" />
+        </xs:all>
+        <xs:attribute name="path" type="xs:string" use="required" />
+    </xs:complexType>
+    <xs:complexType name="PartSubListType">
+        <xs:all>
+            <xs:element name="parts" minOccurs="0" type="slc:PartsType" />
+        </xs:all>
+    </xs:complexType>
+    <xs:complexType name="PartsType">
+        <xs:sequence>
+            <xs:element name="simple-result-part"
+                type="slc:SimpleResultPartType" maxOccurs="unbounded">
+            </xs:element>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="SimpleResultPartType">
+        <xs:all>
+            <xs:element name="status">
+                <xs:simpleType>
+                    <xs:restriction base="xs:string">
+                        <xs:enumeration value="PASSED" />
+                        <xs:enumeration value="FAILED" />
+                        <xs:enumeration value="ERROR" />
+                    </xs:restriction>
+                </xs:simpleType>
+            </xs:element>
+            <xs:element name="message" type="xs:string" />
+            <xs:element name="exception-message" minOccurs="0"
+                type="xs:string" />
+            <xs:element name="stack-lines" minOccurs="0"
+                type="slc:StackLinesType" />
+            <xs:element name="test-run-uuid" type="xs:string"
+                minOccurs="0" />
+        </xs:all>
+    </xs:complexType>
+    <xs:complexType name="StackLinesType">
+        <xs:sequence>
+            <xs:element name="stack-line" maxOccurs="unbounded"
+                type="xs:string" />
+        </xs:sequence>
+        <xs:attribute name="message" type="xs:string" />
+    </xs:complexType>
+    <xs:complexType name="ElementsType">
+        <xs:sequence>
+            <xs:element name="element" type="slc:ElementType"
+                minOccurs="0" maxOccurs="unbounded">
+            </xs:element>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="ElementType">
+        <xs:all>
+            <xs:element name="simple-sElement"
+                type="slc:SimpleSElementType" />
+        </xs:all>
+        <xs:attribute name="path" type="xs:string" use="required" />
+    </xs:complexType>
+    <xs:complexType name="SimpleSElementType">
+        <xs:all>
+            <xs:element name="label" type="xs:string" />
+            <xs:element name="tags" type="slc:TagsType" minOccurs="0" />
+        </xs:all>
+    </xs:complexType>
+    <xs:complexType name="TagsType">
+        <xs:sequence>
+            <xs:element name="tag" type="slc:TagType" minOccurs="0"
+                maxOccurs="unbounded">
+            </xs:element>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="TagType">
+        <xs:all>
+            <xs:element name="tag-value" type="xs:string" />
+        </xs:all>
+        <xs:attribute name="name" type="xs:string" use="required" />
+    </xs:complexType>
+    <xs:complexType name="TreeSPathType">
+        <xs:attribute name="as-unique-string" type="xs:string"
+            use="required" />
+    </xs:complexType>
+    <xs:complexType name="TestRunDescriptorType">
+        <xs:all>
+            <xs:element name="test-run-uuid" type="xs:string" />
+            <xs:element name="slc-execution-uuid" type="xs:string"
+                minOccurs="0" />
+            <xs:element name="slc-execution-step-uuid" type="xs:string"
+                minOccurs="0" />
+            <xs:element name="deployed-sytem-id" type="xs:string"
+                minOccurs="0" />
+            <xs:element name="test-result-uuid" type="xs:string"
+                minOccurs="0" />
+        </xs:all>
+    </xs:complexType>
 
-       <!-- TREE TEST RESULT REQUESTS -->
-       <xs:element name="create-tree-test-result-request">
-               <xs:complexType>
-                       <xs:all>
-                               <xs:element name="tree-test-result"
-                                       type="slc:TreeTestResultType" />
-                       </xs:all>
-               </xs:complexType>
-       </xs:element>
+    <!-- TREE TEST RESULT REQUESTS -->
+    <xs:element name="create-tree-test-result-request">
+        <xs:complexType>
+            <xs:all>
+                <xs:element name="tree-test-result"
+                    type="slc:TreeTestResultType" />
+                <xs:element name="test-run-descriptor"
+                    type="slc:TestRunDescriptorType" maxOccurs="1" minOccurs="0"/>
+            </xs:all>
+        </xs:complexType>
+    </xs:element>
 
-       <xs:element name="close-tree-test-result-request">
-               <xs:complexType>
-                       <xs:all>
-                               <xs:element name="result-uuid" type="xs:string" />
-                               <xs:element name="close-date" type="xs:dateTime" />
-                       </xs:all>
-               </xs:complexType>
-       </xs:element>
+    <xs:element name="close-tree-test-result-request">
+        <xs:complexType>
+            <xs:all>
+                <xs:element name="result-uuid" type="xs:string" />
+                <xs:element name="close-date" type="xs:dateTime" />
+            </xs:all>
+        </xs:complexType>
+    </xs:element>
 
-       <xs:element name="result-part-request">
-               <xs:complexType>
-                       <xs:all>
-                               <xs:element name="result-uuid" type="xs:string" />
-                               <xs:element name="simple-result-part"
-                                       type="slc:SimpleResultPartType" />
-                               <xs:element name="related-elements"
-                                       type="slc:ElementsType" />
-                               <xs:element name="tree-sPath" type="slc:TreeSPathType" />
-                               <xs:element name="test-run-descriptor"
-                                       type="slc:TestRunDescriptorType" />
-                       </xs:all>
-               </xs:complexType>
-       </xs:element>
+    <xs:element name="result-part-request">
+        <xs:complexType>
+            <xs:all>
+                <xs:element name="result-uuid" type="xs:string" />
+                <xs:element name="simple-result-part"
+                    type="slc:SimpleResultPartType" />
+                <xs:element name="related-elements"
+                    type="slc:ElementsType" />
+                <xs:element name="tree-sPath" type="slc:TreeSPathType" />
+                <xs:element name="test-run-descriptor"
+                    type="slc:TestRunDescriptorType" />
+                <xs:element name="attributes" minOccurs="0"
+                    type="slc:AttributesType" />
+            </xs:all>
+        </xs:complexType>
+    </xs:element>
 
-       <!-- SLC EXECUTION -->
-       <xs:element name="slc-execution" type="slc:SlcExecutionType" />
-       <xs:complexType name="SlcExecutionType">
-               <xs:all>
-                       <xs:element name="status" type="xs:string" />
-                       <xs:element name="type" type="xs:string" />
-                       <xs:element name="host" type="xs:string" />
-                       <xs:element name="user" type="xs:string" />
-                       <xs:element name="steps" minOccurs="0"
-                               type="slc:SlcExecutionStepsType" />
-                       <xs:element name="attributes" minOccurs="0"
-                               type="slc:AttributesType" />
-               </xs:all>
-               <xs:attribute name="uuid" type="xs:string" use="required" />
-       </xs:complexType>
-       <xs:complexType name="SlcExecutionStepsType">
-               <xs:sequence>
-                       <xs:element name="slc-execution-step"
-                               type="slc:SlcExecutionStepType" maxOccurs="unbounded">
-                       </xs:element>
-               </xs:sequence>
-       </xs:complexType>
-       <xs:complexType name="SlcExecutionStepType">
-               <xs:all>
-                       <xs:element name="type" type="xs:string" />
-                       <xs:element name="begin" type="xs:dateTime" />
-                       <xs:element name="log-lines" minOccurs="0">
-                               <xs:complexType>
-                                       <xs:sequence>
-                                               <xs:element name="log-line" type="xs:string"
-                                                       maxOccurs="unbounded" />
-                                       </xs:sequence>
-                               </xs:complexType>
-                       </xs:element>
-               </xs:all>
-               <xs:attribute name="uuid" type="xs:string" use="required" />
-       </xs:complexType>
-       <xs:complexType name="AttributesType">
-               <xs:sequence>
-                       <xs:element name="attribute" type="slc:AttributeType"
-                               minOccurs="0" maxOccurs="unbounded">
-                       </xs:element>
-               </xs:sequence>
-       </xs:complexType>
-       <xs:complexType name="AttributeType">
-               <xs:simpleContent>
-                       <xs:extension base="xs:string">
-                               <xs:attribute name="name" type="xs:string"
-                                       use="required" />
-                       </xs:extension>
-               </xs:simpleContent>
-       </xs:complexType>
+    <!-- SLC EXECUTION -->
+    <xs:element name="slc-execution" type="slc:SlcExecutionType" />
+    <xs:complexType name="SlcExecutionType">
+        <xs:all>
+            <xs:element name="status" type="xs:string" />
+            <xs:element name="type" type="xs:string" />
+            <xs:element name="host" type="xs:string" />
+            <xs:element name="user" type="xs:string" />
+            <xs:element name="steps" minOccurs="0"
+                type="slc:SlcExecutionStepsType" />
+            <xs:element name="attributes" minOccurs="0"
+                type="slc:AttributesType" />
+        </xs:all>
+        <xs:attribute name="uuid" type="xs:string" use="required" />
+    </xs:complexType>
+    <xs:complexType name="SlcExecutionStepsType">
+        <xs:sequence>
+            <xs:element name="slc-execution-step"
+                type="slc:SlcExecutionStepType" maxOccurs="unbounded">
+            </xs:element>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="SlcExecutionStepType">
+        <xs:all>
+            <xs:element name="type" type="xs:string" />
+            <xs:element name="begin" type="xs:dateTime" />
+            <xs:element name="log-lines" minOccurs="0">
+                <xs:complexType>
+                    <xs:sequence>
+                        <xs:element name="log-line" type="xs:string"
+                            maxOccurs="unbounded" />
+                    </xs:sequence>
+                </xs:complexType>
+            </xs:element>
+        </xs:all>
+        <xs:attribute name="uuid" type="xs:string" use="required" />
+    </xs:complexType>
+    <xs:complexType name="AttributesType">
+        <xs:sequence>
+            <xs:element name="attribute" type="slc:AttributeType"
+                minOccurs="0" maxOccurs="unbounded">
+            </xs:element>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="AttributeType">
+        <xs:simpleContent>
+            <xs:extension base="xs:string">
+                <xs:attribute name="name" type="xs:string"
+                    use="required" />
+            </xs:extension>
+        </xs:simpleContent>
+    </xs:complexType>
 
-       <!-- SLC EXECUTION REQUESTS-->
-       <xs:element name="slc-execution-request">
-               <xs:complexType>
-                       <xs:all>
-                               <xs:element name="slc-execution"
-                                       type="slc:SlcExecutionType" />
-                       </xs:all>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="slc-execution-steps-request">
-               <xs:complexType>
-                       <xs:all>
-                               <xs:element name="slc-execution-uuid" type="xs:string" />
-                               <xs:element name="steps"
-                                       type="slc:SlcExecutionStepsType" />
-                       </xs:all>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="slc-execution-status-request">
-               <xs:complexType>
-                       <xs:all>
-                               <xs:element name="slc-execution-uuid" type="xs:string" />
-                               <xs:element name="new-status" type="xs:string" />
-                       </xs:all>
-               </xs:complexType>
-       </xs:element>
+    <!-- SLC EXECUTION REQUESTS-->
+    <xs:element name="slc-execution-request">
+        <xs:complexType>
+            <xs:all>
+                <xs:element name="slc-execution"
+                    type="slc:SlcExecutionType" />
+            </xs:all>
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="slc-execution-steps-request">
+        <xs:complexType>
+            <xs:all>
+                <xs:element name="slc-execution-uuid" type="xs:string" />
+                <xs:element name="steps"
+                    type="slc:SlcExecutionStepsType" />
+            </xs:all>
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="slc-execution-status-request">
+        <xs:complexType>
+            <xs:all>
+                <xs:element name="slc-execution-uuid" type="xs:string" />
+                <xs:element name="new-status" type="xs:string" />
+            </xs:all>
+        </xs:complexType>
+    </xs:element>
 
 </xs:schema>
\ No newline at end of file