From 80dbbc034f748b79b8a5370a56e178f9e1abb757 Mon Sep 17 00:00:00 2001
From: Dominik Adam Przybysz <alien11689@gmail.com>
Date: Wed, 2 Sep 2015 22:59:50 +0200
Subject: [PATCH] Add xsd and docker

Change-Id: Ifad2e3a8678a487e6f13114f910e19bce4d80964
---
 Dockerfile                                    |   7 +
 buildImage.sh                                 |   6 +
 mockserver-api/pom.xml                        |  27 ++++
 .../touk/mockserver/api/request/AddMock.java  |  33 -----
 .../touk/mockserver/api/request/Method.java   |  15 --
 .../api/request/MockServerRequest.java        |   4 -
 .../touk/mockserver/api/request/PeekMock.java |  15 --
 .../mockserver/api/request/RemoveMock.java    |  17 ---
 .../mockserver/api/request/package-info.java  |   4 -
 .../api/response/ExceptionOccured.java        |  13 --
 .../mockserver/api/response/MockAdded.java    |  12 --
 .../api/response/MockEventReport.java         |  14 --
 .../mockserver/api/response/MockListing.java  |  16 ---
 .../mockserver/api/response/MockPeeked.java   |  16 ---
 .../mockserver/api/response/MockRemoved.java  |  16 ---
 .../mockserver/api/response/MockReport.java   |  37 -----
 .../api/response/MockRequestReport.java       |  24 ----
 .../api/response/MockResponseReport.java      |  19 ---
 .../api/response/MockServerResponse.java      |   4 -
 .../mockserver/api/response/Parameter.java    |  15 --
 .../mockserver/api/response/package-info.java |   4 -
 .../pl/touk/mockserver/api/request/jaxb.index |   4 -
 .../touk/mockserver/api/response/jaxb.index   |  11 --
 mockserver-api/src/main/xjb/binding.xjb       |  10 ++
 .../xsd/pl/touk/mockserver/api/common.xsd     |  17 +++
 .../xsd/pl/touk/mockserver/api/request.xsd    |  51 +++++++
 .../xsd/pl/touk/mockserver/api/response.xsd   | 134 ++++++++++++++++++
 .../mockserver/client/RemoteMockServer.groovy |   8 +-
 .../pl/touk/mockserver/client/Util.groovy     |   2 +-
 .../tests/MockServerIntegrationTest.groovy    |  73 +++++-----
 .../mockserver/server/ContextExecutor.groovy  |   2 +-
 .../mockserver/server/HttpMockServer.groovy   |  23 +--
 .../pl/touk/mockserver/server/Mock.groovy     |   8 +-
 33 files changed, 313 insertions(+), 348 deletions(-)
 create mode 100644 Dockerfile
 create mode 100755 buildImage.sh
 delete mode 100644 mockserver-api/src/main/java/pl/touk/mockserver/api/request/AddMock.java
 delete mode 100644 mockserver-api/src/main/java/pl/touk/mockserver/api/request/Method.java
 delete mode 100644 mockserver-api/src/main/java/pl/touk/mockserver/api/request/MockServerRequest.java
 delete mode 100644 mockserver-api/src/main/java/pl/touk/mockserver/api/request/PeekMock.java
 delete mode 100644 mockserver-api/src/main/java/pl/touk/mockserver/api/request/RemoveMock.java
 delete mode 100644 mockserver-api/src/main/java/pl/touk/mockserver/api/request/package-info.java
 delete mode 100644 mockserver-api/src/main/java/pl/touk/mockserver/api/response/ExceptionOccured.java
 delete mode 100644 mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockAdded.java
 delete mode 100644 mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockEventReport.java
 delete mode 100644 mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockListing.java
 delete mode 100644 mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockPeeked.java
 delete mode 100644 mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockRemoved.java
 delete mode 100644 mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockReport.java
 delete mode 100644 mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockRequestReport.java
 delete mode 100644 mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockResponseReport.java
 delete mode 100644 mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockServerResponse.java
 delete mode 100644 mockserver-api/src/main/java/pl/touk/mockserver/api/response/Parameter.java
 delete mode 100644 mockserver-api/src/main/java/pl/touk/mockserver/api/response/package-info.java
 delete mode 100644 mockserver-api/src/main/resource/pl/touk/mockserver/api/request/jaxb.index
 delete mode 100644 mockserver-api/src/main/resource/pl/touk/mockserver/api/response/jaxb.index
 create mode 100644 mockserver-api/src/main/xjb/binding.xjb
 create mode 100644 mockserver-api/src/main/xsd/pl/touk/mockserver/api/common.xsd
 create mode 100644 mockserver-api/src/main/xsd/pl/touk/mockserver/api/request.xsd
 create mode 100644 mockserver-api/src/main/xsd/pl/touk/mockserver/api/response.xsd

diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..f76ca67
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,7 @@
+FROM java:8
+
+ADD mockserver/target/mockserver-1.1.1-SNAPSHOT-jar-with-dependencies.jar /mockserver.jar
+
+EXPOSE 9999
+
+CMD java -jar /mockserver.jar
diff --git a/buildImage.sh b/buildImage.sh
new file mode 100755
index 0000000..ada5685
--- /dev/null
+++ b/buildImage.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+mvn clean install
+mvn -f mockserver/pom.xml package assembly:single
+
+docker build -t mockserver .
diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml
index a7c59b9..c7cbf27 100644
--- a/mockserver-api/pom.xml
+++ b/mockserver-api/pom.xml
@@ -17,4 +17,31 @@
             <artifactId>lombok</artifactId>
         </dependency>
     </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.3</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>jaxb2-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>xjc</id>
+                        <phase>process-resources</phase>
+                        <goals>
+                            <goal>xjc</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>
\ No newline at end of file
diff --git a/mockserver-api/src/main/java/pl/touk/mockserver/api/request/AddMock.java b/mockserver-api/src/main/java/pl/touk/mockserver/api/request/AddMock.java
deleted file mode 100644
index 80ad580..0000000
--- a/mockserver-api/src/main/java/pl/touk/mockserver/api/request/AddMock.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package pl.touk.mockserver.api.request;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-
-@XmlRootElement
-@Data
-@EqualsAndHashCode(callSuper = false)
-public class AddMock extends MockServerRequest {
-    @XmlElement(required = true)
-    private String name;
-
-    @XmlElement(required = true)
-    private String path;
-
-    @XmlElement(required = true)
-    private int port;
-
-    private String predicate;
-
-    private String response;
-
-    private Boolean soap;
-
-    private Integer statusCode;
-
-    private Method method;
-
-    private String responseHeaders;
-}
diff --git a/mockserver-api/src/main/java/pl/touk/mockserver/api/request/Method.java b/mockserver-api/src/main/java/pl/touk/mockserver/api/request/Method.java
deleted file mode 100644
index 9e471a1..0000000
--- a/mockserver-api/src/main/java/pl/touk/mockserver/api/request/Method.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package pl.touk.mockserver.api.request;
-
-import javax.xml.bind.annotation.XmlEnum;
-
-@XmlEnum
-public enum Method {
-    POST,
-    GET,
-    DELETE,
-    PUT,
-    TRACE,
-    HEAD,
-    OPTIONS,
-    PATCH;
-}
diff --git a/mockserver-api/src/main/java/pl/touk/mockserver/api/request/MockServerRequest.java b/mockserver-api/src/main/java/pl/touk/mockserver/api/request/MockServerRequest.java
deleted file mode 100644
index 91c1ba9..0000000
--- a/mockserver-api/src/main/java/pl/touk/mockserver/api/request/MockServerRequest.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package pl.touk.mockserver.api.request;
-
-public abstract class MockServerRequest {
-}
diff --git a/mockserver-api/src/main/java/pl/touk/mockserver/api/request/PeekMock.java b/mockserver-api/src/main/java/pl/touk/mockserver/api/request/PeekMock.java
deleted file mode 100644
index d4f14ca..0000000
--- a/mockserver-api/src/main/java/pl/touk/mockserver/api/request/PeekMock.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package pl.touk.mockserver.api.request;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-
-@XmlRootElement
-@Data
-@EqualsAndHashCode(callSuper = false)
-public class PeekMock extends MockServerRequest{
-    @XmlElement(required = true)
-    private String name;
-}
diff --git a/mockserver-api/src/main/java/pl/touk/mockserver/api/request/RemoveMock.java b/mockserver-api/src/main/java/pl/touk/mockserver/api/request/RemoveMock.java
deleted file mode 100644
index 49c8b0b..0000000
--- a/mockserver-api/src/main/java/pl/touk/mockserver/api/request/RemoveMock.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package pl.touk.mockserver.api.request;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-
-@XmlRootElement
-@Data
-@EqualsAndHashCode(callSuper = false)
-public class RemoveMock extends MockServerRequest {
-    @XmlElement(required = true)
-    private String name;
-
-    private Boolean skipReport;
-}
diff --git a/mockserver-api/src/main/java/pl/touk/mockserver/api/request/package-info.java b/mockserver-api/src/main/java/pl/touk/mockserver/api/request/package-info.java
deleted file mode 100644
index 6ccf1df..0000000
--- a/mockserver-api/src/main/java/pl/touk/mockserver/api/request/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-@XmlAccessorType(XmlAccessType.FIELD) package pl.touk.mockserver.api.request;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
\ No newline at end of file
diff --git a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/ExceptionOccured.java b/mockserver-api/src/main/java/pl/touk/mockserver/api/response/ExceptionOccured.java
deleted file mode 100644
index a10382b..0000000
--- a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/ExceptionOccured.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package pl.touk.mockserver.api.response;
-
-import lombok.Data;
-
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlValue;
-
-@XmlRootElement
-@Data
-public class ExceptionOccured {
-    @XmlValue
-    private String message;
-}
diff --git a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockAdded.java b/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockAdded.java
deleted file mode 100644
index 8dc13a9..0000000
--- a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockAdded.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package pl.touk.mockserver.api.response;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import javax.xml.bind.annotation.XmlRootElement;
-
-@XmlRootElement
-@Data
-@EqualsAndHashCode(callSuper = false)
-public class MockAdded extends MockServerResponse {
-}
diff --git a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockEventReport.java b/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockEventReport.java
deleted file mode 100644
index faa2497..0000000
--- a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockEventReport.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package pl.touk.mockserver.api.response;
-
-import lombok.Data;
-
-import javax.xml.bind.annotation.XmlElement;
-
-@Data
-public class MockEventReport {
-    @XmlElement(required = true)
-    private MockRequestReport request;
-
-    @XmlElement(required = true)
-    private MockResponseReport response;
-}
diff --git a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockListing.java b/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockListing.java
deleted file mode 100644
index 77f5e24..0000000
--- a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockListing.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package pl.touk.mockserver.api.response;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import java.util.List;
-
-@XmlRootElement(name = "mocks")
-@Data
-@EqualsAndHashCode(callSuper = false)
-public class MockListing extends MockServerResponse {
-    @XmlElement(name = "mock")
-    private List<MockReport> mocks;
-}
diff --git a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockPeeked.java b/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockPeeked.java
deleted file mode 100644
index a23daae..0000000
--- a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockPeeked.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package pl.touk.mockserver.api.response;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import java.util.List;
-
-@XmlRootElement
-@Data
-@EqualsAndHashCode(callSuper = false)
-public class MockPeeked extends MockServerResponse {
-    @XmlElement(name = "mockEvent")
-    private List<MockEventReport> mockEvents;
-}
diff --git a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockRemoved.java b/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockRemoved.java
deleted file mode 100644
index 008d318..0000000
--- a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockRemoved.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package pl.touk.mockserver.api.response;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import java.util.List;
-
-@XmlRootElement
-@Data
-@EqualsAndHashCode(callSuper = false)
-public class MockRemoved extends MockServerResponse {
-    @XmlElement(name = "mockEvent")
-    private List<MockEventReport> mockEvents;
-}
diff --git a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockReport.java b/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockReport.java
deleted file mode 100644
index aa7bd8f..0000000
--- a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockReport.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package pl.touk.mockserver.api.response;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import pl.touk.mockserver.api.request.Method;
-
-import javax.xml.bind.annotation.XmlElement;
-
-@Data
-public class MockReport {
-    @XmlElement(required = true)
-    private String name;
-
-    @XmlElement(required = true)
-    private String path;
-
-    @XmlElement(required = true)
-    private int port;
-
-    @XmlElement(required = true)
-    private String predicate;
-
-    @XmlElement(required = true)
-    private String response;
-
-    @XmlElement(required = true)
-    private String responseHeaders;
-
-    @XmlElement(required = true)
-    private boolean soap;
-
-    @XmlElement(required = true)
-    private Method method;
-
-    @XmlElement(required = true)
-    private int statusCode;
-}
diff --git a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockRequestReport.java b/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockRequestReport.java
deleted file mode 100644
index aecd48f..0000000
--- a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockRequestReport.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package pl.touk.mockserver.api.response;
-
-import lombok.Data;
-
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-import java.util.List;
-
-@Data
-public class MockRequestReport {
-    private String text;
-
-    @XmlElementWrapper(name = "headers")
-    @XmlElement(name = "header")
-    private List<Parameter> headers;
-
-    @XmlElementWrapper(name = "queryParams")
-    @XmlElement(name = "queryParam")
-    private List<Parameter> queryParams;
-
-    @XmlElementWrapper(name = "path")
-    @XmlElement(name = "pathPart")
-    private List<String> paths;
-}
diff --git a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockResponseReport.java b/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockResponseReport.java
deleted file mode 100644
index 83d3da5..0000000
--- a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockResponseReport.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package pl.touk.mockserver.api.response;
-
-import lombok.Data;
-
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-import java.util.List;
-
-@Data
-public class MockResponseReport {
-    @XmlElement(required = true)
-    private int statusCode;
-
-    private String text;
-
-    @XmlElementWrapper(name = "headers")
-    @XmlElement(name = "header")
-    private List<Parameter> headers;
-}
diff --git a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockServerResponse.java b/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockServerResponse.java
deleted file mode 100644
index bf7e0ae..0000000
--- a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockServerResponse.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package pl.touk.mockserver.api.response;
-
-public abstract class MockServerResponse {
-}
diff --git a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/Parameter.java b/mockserver-api/src/main/java/pl/touk/mockserver/api/response/Parameter.java
deleted file mode 100644
index 6a9c0c3..0000000
--- a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/Parameter.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package pl.touk.mockserver.api.response;
-
-import lombok.Data;
-
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlValue;
-
-@Data
-public class Parameter {
-    @XmlAttribute(required = true)
-    private String name;
-
-    @XmlValue
-    private String value;
-}
diff --git a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/package-info.java b/mockserver-api/src/main/java/pl/touk/mockserver/api/response/package-info.java
deleted file mode 100644
index d317cb9..0000000
--- a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-@XmlAccessorType(XmlAccessType.FIELD) package pl.touk.mockserver.api.response;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
\ No newline at end of file
diff --git a/mockserver-api/src/main/resource/pl/touk/mockserver/api/request/jaxb.index b/mockserver-api/src/main/resource/pl/touk/mockserver/api/request/jaxb.index
deleted file mode 100644
index 233becc..0000000
--- a/mockserver-api/src/main/resource/pl/touk/mockserver/api/request/jaxb.index
+++ /dev/null
@@ -1,4 +0,0 @@
-AddMock
-Method
-PeekMock
-RemoveMock
\ No newline at end of file
diff --git a/mockserver-api/src/main/resource/pl/touk/mockserver/api/response/jaxb.index b/mockserver-api/src/main/resource/pl/touk/mockserver/api/response/jaxb.index
deleted file mode 100644
index 86bdb57..0000000
--- a/mockserver-api/src/main/resource/pl/touk/mockserver/api/response/jaxb.index
+++ /dev/null
@@ -1,11 +0,0 @@
-ExceptionOccured
-MockAdded
-MockEventReport
-MockListing
-MockPeeked
-MockRemoved
-MockReport
-MockRequestReport
-MockResponseReport
-MockServerResponse
-Parameter
\ No newline at end of file
diff --git a/mockserver-api/src/main/xjb/binding.xjb b/mockserver-api/src/main/xjb/binding.xjb
new file mode 100644
index 0000000..a735d24
--- /dev/null
+++ b/mockserver-api/src/main/xjb/binding.xjb
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
+              xmlns:xjc= "http://java.sun.com/xml/ns/jaxb/xjc"
+              jxb:extensionBindingPrefixes="xjc" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+    <jxb:bindings>
+        <jxb:globalBindings>
+            <xjc:simple/>
+        </jxb:globalBindings>
+    </jxb:bindings>
+</jxb:bindings>
\ No newline at end of file
diff --git a/mockserver-api/src/main/xsd/pl/touk/mockserver/api/common.xsd b/mockserver-api/src/main/xsd/pl/touk/mockserver/api/common.xsd
new file mode 100644
index 0000000..a48f724
--- /dev/null
+++ b/mockserver-api/src/main/xsd/pl/touk/mockserver/api/common.xsd
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<xs:schema version="1.0" targetNamespace="http://touk.pl/mockserver/api/common" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+  <xs:simpleType name="method">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="POST"/>
+      <xs:enumeration value="GET"/>
+      <xs:enumeration value="DELETE"/>
+      <xs:enumeration value="PUT"/>
+      <xs:enumeration value="TRACE"/>
+      <xs:enumeration value="HEAD"/>
+      <xs:enumeration value="OPTIONS"/>
+      <xs:enumeration value="PATCH"/>
+    </xs:restriction>
+  </xs:simpleType>
+</xs:schema>
+
diff --git a/mockserver-api/src/main/xsd/pl/touk/mockserver/api/request.xsd b/mockserver-api/src/main/xsd/pl/touk/mockserver/api/request.xsd
new file mode 100644
index 0000000..fb4afca
--- /dev/null
+++ b/mockserver-api/src/main/xsd/pl/touk/mockserver/api/request.xsd
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<xs:schema elementFormDefault="qualified" version="1.0" targetNamespace="http://touk.pl/mockserver/api/request" xmlns:tns="http://touk.pl/mockserver/api/request" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:common="http://touk.pl/mockserver/api/common">
+
+  <xs:import namespace="http://touk.pl/mockserver/api/common" schemaLocation="common.xsd"/>
+
+  <xs:element name="addMock" type="tns:AddMock"/>
+
+  <xs:element name="peekMock" type="tns:PeekMock"/>
+
+  <xs:element name="removeMock" type="tns:RemoveMock"/>
+
+  <xs:complexType name="AddMock">
+    <xs:complexContent>
+      <xs:extension base="tns:mockServerRequest">
+        <xs:sequence>
+          <xs:element name="path" type="xs:string"/>
+          <xs:element name="port" type="xs:int"/>
+          <xs:element name="predicate" type="xs:string" minOccurs="0"/>
+          <xs:element name="response" type="xs:string" minOccurs="0"/>
+          <xs:element name="soap" type="xs:boolean" minOccurs="0"/>
+          <xs:element name="statusCode" type="xs:int" minOccurs="0"/>
+          <xs:element name="method" type="common:method" minOccurs="0"/>
+          <xs:element name="responseHeaders" type="xs:string" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="mockServerRequest" abstract="true">
+    <xs:sequence>
+      <xs:element name="name" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="PeekMock">
+    <xs:complexContent>
+      <xs:extension base="tns:mockServerRequest"/>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="RemoveMock">
+    <xs:complexContent>
+      <xs:extension base="tns:mockServerRequest">
+        <xs:sequence>
+          <xs:element name="skipReport" type="xs:boolean" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:schema>
+
diff --git a/mockserver-api/src/main/xsd/pl/touk/mockserver/api/response.xsd b/mockserver-api/src/main/xsd/pl/touk/mockserver/api/response.xsd
new file mode 100644
index 0000000..21ffd9b
--- /dev/null
+++ b/mockserver-api/src/main/xsd/pl/touk/mockserver/api/response.xsd
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<xs:schema elementFormDefault="qualified" version="1.0" targetNamespace="http://touk.pl/mockserver/api/response" xmlns:tns="http://touk.pl/mockserver/api/response" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:common="http://touk.pl/mockserver/api/common">
+
+  <xs:import namespace="http://touk.pl/mockserver/api/common" schemaLocation="common.xsd"/>
+
+  <xs:element name="exceptionOccured" type="tns:exceptionOccured"/>
+
+  <xs:element name="mockAdded" type="tns:mockAdded"/>
+
+  <xs:element name="mockPeeked" type="tns:mockPeeked"/>
+
+  <xs:element name="mockRemoved" type="tns:mockRemoved"/>
+
+  <xs:element name="mocks" type="tns:mockListing"/>
+
+  <xs:complexType name="exceptionOccured">
+    <xs:simpleContent>
+      <xs:extension base="xs:string"/>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:complexType name="mockAdded">
+    <xs:complexContent>
+      <xs:extension base="tns:mockServerResponse">
+        <xs:sequence/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="mockServerResponse" abstract="true">
+    <xs:sequence/>
+  </xs:complexType>
+
+  <xs:complexType name="mockEventReport">
+    <xs:sequence>
+      <xs:element name="request" type="tns:mockRequestReport"/>
+      <xs:element name="response" type="tns:mockResponseReport"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="mockRequestReport">
+    <xs:sequence>
+      <xs:element name="text" type="xs:string" minOccurs="0"/>
+      <xs:element name="headers" minOccurs="0">
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element name="header" type="tns:parameter" minOccurs="0" maxOccurs="unbounded"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+      <xs:element name="queryParams" minOccurs="0">
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element name="queryParam" type="tns:parameter" minOccurs="0" maxOccurs="unbounded"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+      <xs:element name="path" minOccurs="0">
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element name="pathPart" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="parameter">
+    <xs:simpleContent>
+      <xs:extension base="xs:string">
+        <xs:attribute name="name" type="xs:string" use="required"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:complexType name="mockResponseReport">
+    <xs:sequence>
+      <xs:element name="statusCode" type="xs:int"/>
+      <xs:element name="text" type="xs:string" minOccurs="0"/>
+      <xs:element name="headers" minOccurs="0">
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element name="header" type="tns:parameter" minOccurs="0" maxOccurs="unbounded"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="mockListing">
+    <xs:complexContent>
+      <xs:extension base="tns:mockServerResponse">
+        <xs:sequence>
+          <xs:element name="mock" type="tns:mockReport" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="mockReport">
+    <xs:sequence>
+      <xs:element name="name" type="xs:string"/>
+      <xs:element name="path" type="xs:string"/>
+      <xs:element name="port" type="xs:int"/>
+      <xs:element name="predicate" type="xs:string"/>
+      <xs:element name="response" type="xs:string"/>
+      <xs:element name="responseHeaders" type="xs:string"/>
+      <xs:element name="soap" type="xs:boolean"/>
+      <xs:element name="method" type="common:method"/>
+      <xs:element name="statusCode" type="xs:int"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="mockPeeked">
+    <xs:complexContent>
+      <xs:extension base="tns:mockServerResponse">
+        <xs:sequence>
+          <xs:element name="mockEvent" type="tns:mockEventReport" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="mockRemoved">
+    <xs:complexContent>
+      <xs:extension base="tns:mockServerResponse">
+        <xs:sequence>
+          <xs:element name="mockEvent" type="tns:mockEventReport" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:schema>
+
diff --git a/mockserver-client/src/main/groovy/pl/touk/mockserver/client/RemoteMockServer.groovy b/mockserver-client/src/main/groovy/pl/touk/mockserver/client/RemoteMockServer.groovy
index 14664e0..ffbc9a0 100644
--- a/mockserver-client/src/main/groovy/pl/touk/mockserver/client/RemoteMockServer.groovy
+++ b/mockserver-client/src/main/groovy/pl/touk/mockserver/client/RemoteMockServer.groovy
@@ -18,9 +18,7 @@ import javax.xml.bind.JAXBContext
 class RemoteMockServer {
     private final String address
     private final CloseableHttpClient client = HttpClients.createDefault()
-    private static final JAXBContext requestContext = JAXBContext.newInstance(AddMock.package.name, AddMock.classLoader)
-    private static
-    final JAXBContext responseContext = JAXBContext.newInstance(MockAdded.package.name, MockAdded.classLoader)
+    private static final JAXBContext requestContext = JAXBContext.newInstance(AddMock, PeekMock, RemoveMock)
 
     RemoteMockServer(String host, int port) {
         address = "http://$host:$port/serverControl"
@@ -70,7 +68,7 @@ class RemoteMockServer {
     List<MockReport> listMocks() {
         HttpGet get = new HttpGet(address)
         CloseableHttpResponse response = client.execute(get)
-        MockListing mockListing = Util.extractResponse(response) as MockListing
-        return mockListing.mocks
+        Mocks mocks = Util.extractResponse(response) as Mocks
+        return mocks.mocks
     }
 }
diff --git a/mockserver-client/src/main/groovy/pl/touk/mockserver/client/Util.groovy b/mockserver-client/src/main/groovy/pl/touk/mockserver/client/Util.groovy
index 446ebf0..966625f 100644
--- a/mockserver-client/src/main/groovy/pl/touk/mockserver/client/Util.groovy
+++ b/mockserver-client/src/main/groovy/pl/touk/mockserver/client/Util.groovy
@@ -35,7 +35,7 @@ class Util {
             return responseContext.createUnmarshaller().unmarshal(new StringReader(responseString)) as MockServerResponse
         }
         ExceptionOccured exceptionOccured = responseContext.createUnmarshaller().unmarshal(new StringReader(responseString)) as ExceptionOccured
-        String message = exceptionOccured.message
+        String message = exceptionOccured.value
         if (message == 'mock already registered') {
             throw new MockAlreadyExists()
         }
diff --git a/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerIntegrationTest.groovy b/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerIntegrationTest.groovy
index 32c9623..018a28d 100644
--- a/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerIntegrationTest.groovy
+++ b/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerIntegrationTest.groovy
@@ -8,7 +8,7 @@ import org.apache.http.impl.client.CloseableHttpClient
 import org.apache.http.impl.client.HttpClients
 import org.apache.http.util.EntityUtils
 import pl.touk.mockserver.api.request.AddMock
-import pl.touk.mockserver.api.request.Method
+import pl.touk.mockserver.api.common.Method
 import pl.touk.mockserver.api.response.MockEventReport
 import pl.touk.mockserver.api.response.MockReport
 import pl.touk.mockserver.api.response.Parameter
@@ -637,14 +637,21 @@ class MockServerIntegrationTest extends Specification {
                     port: 9999
             ))
             remoteMockServer.removeMock('testRest5')
-        expect:
-            remoteMockServer.listMocks() == [
-                    new MockReport(name: 'testRest', path: 'testEndpoint', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }', soap: false, statusCode: 200, method: Method.POST),
-                    new MockReport(name: 'testRest2', path: 'testEndpoint', port: 9998, predicate: '''{ req -> req.xml.name() == 'request1'}''', response: '''{ req -> '<response/>' }''', responseHeaders: '{ _ -> [a: "b"] }', soap: false, statusCode: 200, method: Method.POST),
-                    new MockReport(name: 'testRest3', path: 'testEndpoint2', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }', soap: false, statusCode: 200, method: Method.POST),
-                    new MockReport(name: 'testRest4', path: 'testEndpoint', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }', soap: true, statusCode: 204, method: Method.PUT),
-                    new MockReport(name: 'testRest6', path: 'testEndpoint2', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }', soap: false, statusCode: 200, method: Method.POST)
-            ]
+        when:
+            List<MockReport> mockReport = remoteMockServer.listMocks()
+        then:
+            mockReport.size() == 5
+            assertMockReport(mockReport[0], [name:'testRest', path: 'testEndpoint', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }', soap: false, statusCode: 200, method: Method.POST])
+            assertMockReport(mockReport[1], [name: 'testRest2', path: 'testEndpoint', port: 9998, predicate: '''{ req -> req.xml.name() == 'request1'}''', response: '''{ req -> '<response/>' }''', responseHeaders: '{ _ -> [a: "b"] }', soap: false, statusCode: 200, method: Method.POST])
+            assertMockReport(mockReport[2], [name: 'testRest3', path: 'testEndpoint2', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }', soap: false, statusCode: 200, method: Method.POST])
+            assertMockReport(mockReport[3], [name: 'testRest4', path: 'testEndpoint', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }', soap: true, statusCode: 204, method: Method.PUT])
+            assertMockReport(mockReport[4], [name: 'testRest6', path: 'testEndpoint2', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }', soap: false, statusCode: 200, method: Method.POST])
+    }
+
+    private void assertMockReport( MockReport mockReport, Map<String, Object> props) {
+        props.each {
+            assert mockReport."${it.key}" == it.value
+        }
     }
 
     def "should add mock accepts path certain path params"() {
@@ -718,18 +725,18 @@ class MockServerIntegrationTest extends Specification {
         then:
             mockEvents1.size() == 2
             mockEvents1[0].request.text == '<request/>'
-            !mockEvents1[0].request.headers?.empty
-            mockEvents1[0].request.queryParams == []
-            mockEvents1[0].request.paths == ['testEndpoint']
-            !mockEvents1[0].response.headers?.empty
+            !mockEvents1[0].request.headers?.headers?.empty
+            mockEvents1[0].request.queryParams.queryParams == []
+            mockEvents1[0].request.path.pathParts == ['testEndpoint']
+            !mockEvents1[0].response.headers?.headers?.empty
             mockEvents1[0].response.text == '<goodResponseRest-request/>'
             mockEvents1[0].response.statusCode == 201
 
             mockEvents1[1].request.text == '<request15/>'
-            !mockEvents1[1].request.headers?.empty
-            mockEvents1[1].request.queryParams == []
-            mockEvents1[1].request.paths == ['testEndpoint', 'hello']
-            !mockEvents1[1].response.headers?.empty
+            !mockEvents1[1].request.headers?.headers?.empty
+            mockEvents1[1].request.queryParams.queryParams == []
+            mockEvents1[1].request.path.pathParts == ['testEndpoint', 'hello']
+            !mockEvents1[1].response.headers?.headers?.empty
             mockEvents1[1].response.text == '<goodResponseRest-request15/>'
             mockEvents1[1].response.statusCode == 201
         when:
@@ -737,10 +744,10 @@ class MockServerIntegrationTest extends Specification {
         then:
             mockEvents2.size() == 1
             mockEvents2[0].request.text == '<reqXYZ/>'
-            !mockEvents2[0].request.headers?.empty
-            mockEvents2[0].request.queryParams == [new Parameter(name: 'id', value: '123')]
-            mockEvents2[0].request.paths == ['testEndpoint']
-            mockEvents2[0].response.headers.find { it.name == 'aaa' }?.value == '15'
+            !mockEvents2[0].request.headers?.headers?.empty
+            mockEvents2[0].request.queryParams.queryParams.find { it.name == 'id' }?.value == '123'
+            mockEvents2[0].request.path.pathParts == ['testEndpoint']
+            mockEvents2[0].response.headers.headers.find { it.name == 'aaa' }?.value == '15'
             mockEvents2[0].response.text == '<goodResponseRest/>'
             mockEvents2[0].response.statusCode == 202
     }
@@ -793,18 +800,18 @@ class MockServerIntegrationTest extends Specification {
         then:
             mockEvents1.size() == 2
             mockEvents1[0].request.text == '<request/>'
-            !mockEvents1[0].request.headers?.empty
-            mockEvents1[0].request.queryParams == []
-            mockEvents1[0].request.paths == ['testEndpoint']
-            !mockEvents1[0].response.headers?.empty
+            !mockEvents1[0].request.headers?.headers?.empty
+            mockEvents1[0].request.queryParams.queryParams == []
+            mockEvents1[0].request.path.pathParts == ['testEndpoint']
+            !mockEvents1[0].response.headers?.headers?.empty
             mockEvents1[0].response.text == '<goodResponseRest-request/>'
             mockEvents1[0].response.statusCode == 201
 
             mockEvents1[1].request.text == '<request15/>'
-            !mockEvents1[1].request.headers?.empty
-            mockEvents1[1].request.queryParams == []
-            mockEvents1[1].request.paths == ['testEndpoint', 'hello']
-            !mockEvents1[1].response.headers?.empty
+            !mockEvents1[1].request.headers?.headers?.empty
+            mockEvents1[1].request.queryParams.queryParams == []
+            mockEvents1[1].request.path.pathParts == ['testEndpoint', 'hello']
+            !mockEvents1[1].response.headers?.headers?.empty
             mockEvents1[1].response.text == '<goodResponseRest-request15/>'
             mockEvents1[1].response.statusCode == 201
         when:
@@ -812,10 +819,10 @@ class MockServerIntegrationTest extends Specification {
         then:
             mockEvents2.size() == 1
             mockEvents2[0].request.text == '<reqXYZ/>'
-            !mockEvents2[0].request.headers?.empty
-            mockEvents2[0].request.queryParams == [new Parameter(name: 'id', value: '123')]
-            mockEvents2[0].request.paths == ['testEndpoint']
-            mockEvents2[0].response.headers.find {it.name == 'aaa'}?.value == '15'
+            !mockEvents2[0].request.headers?.headers?.empty
+            mockEvents2[0].request.queryParams.queryParams.find{it.name == 'id'}?.value == '123'
+            mockEvents2[0].request.path.pathParts == ['testEndpoint']
+            mockEvents2[0].response.headers.headers.find {it.name == 'aaa'}?.value == '15'
             mockEvents2[0].response.text == '<goodResponseRest/>'
             mockEvents2[0].response.statusCode == 202
     }
diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy
index 545dfed..f450df4 100644
--- a/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy
+++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy
@@ -3,7 +3,7 @@ package pl.touk.mockserver.server
 import com.sun.net.httpserver.HttpExchange
 import groovy.transform.PackageScope
 import groovy.util.logging.Slf4j
-import pl.touk.mockserver.api.request.Method
+import pl.touk.mockserver.api.common.Method
 
 import java.util.concurrent.CopyOnWriteArrayList
 
diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy
index 1b8fc9a..0b601ff 100644
--- a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy
+++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy
@@ -2,7 +2,10 @@ package pl.touk.mockserver.server
 
 import com.sun.net.httpserver.HttpExchange
 import groovy.util.logging.Slf4j
-import pl.touk.mockserver.api.request.*
+import pl.touk.mockserver.api.request.AddMock
+import pl.touk.mockserver.api.request.MockServerRequest
+import pl.touk.mockserver.api.request.PeekMock
+import pl.touk.mockserver.api.request.RemoveMock
 import pl.touk.mockserver.api.response.*
 
 import javax.xml.bind.JAXBContext
@@ -50,7 +53,7 @@ class HttpMockServer {
     }
 
     void listMocks(HttpExchange ex) {
-        MockListing mockListing = new MockListing(
+        Mocks mockListing = new Mocks(
                 mocks: listMocks().collect {
                     new MockReport(
                             name: it.name,
@@ -126,20 +129,20 @@ class HttpMockServer {
             new MockEventReport(
                     request: new MockRequestReport(
                             text: it.request.text,
-                            headers: it.request.headers.collect {
+                            headers: new MockRequestReport.Headers(headers: it.request.headers.collect {
                                 new Parameter(name: it.key, value: it.value)
-                            },
-                            queryParams: it.request.query.collect {
+                            }),
+                            queryParams: new MockRequestReport.QueryParams(queryParams: it.request.query.collect {
                                 new Parameter(name: it.key, value: it.value)
-                            },
-                            paths: it.request.path
+                            }),
+                            path: new MockRequestReport.Path(pathParts:  it.request.path)
                     ),
                     response: new MockResponseReport(
                             statusCode: it.response.statusCode,
                             text: it.response.text,
-                            headers: it.response.headers.collect {
+                            headers: new MockResponseReport.Headers(headers:  it.response.headers.collect {
                                 new Parameter(name: it.key, value: it.value)
-                            }
+                            })
                     )
             )
         }
@@ -159,7 +162,7 @@ class HttpMockServer {
     }
 
     private static void createErrorResponse(HttpExchange ex, Exception e) {
-        createResponse(ex, new ExceptionOccured(message: e.message), 400)
+        createResponse(ex, new ExceptionOccured(value: e.message), 400)
     }
 
     void stop() {
diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy
index 5f3aa06..32bad68 100644
--- a/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy
+++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy
@@ -3,7 +3,7 @@ package pl.touk.mockserver.server
 import groovy.transform.EqualsAndHashCode
 import groovy.transform.PackageScope
 import groovy.util.logging.Slf4j
-import pl.touk.mockserver.api.request.Method
+import pl.touk.mockserver.api.common.Method
 
 import java.util.concurrent.CopyOnWriteArrayList
 
@@ -79,10 +79,8 @@ class Mock implements Comparable<Mock> {
         }
     }
 
-    void setSoap(String soap) {
-        if (soap) {
-            this.soap = Boolean.valueOf(soap)
-        }
+    void setSoap(Boolean soap) {
+        this.soap = soap ?: false
     }
 
     void setStatusCode(String statusCode) {