From 5db690c4341140a7a863a075c6fa007cf0d9f9e8 Mon Sep 17 00:00:00 2001 From: Dominik Adam Przybysz Date: Mon, 8 Dec 2014 20:13:07 +0100 Subject: [PATCH] Add soap support --- .../mockserver/ContextExecutor.groovy | 38 +++++++++++++++---- .../mockserver/HttpMockServer.groovy | 3 +- .../blogspot/przybyszd/mockserver/Mock.groovy | 5 ++- 3 files changed, 36 insertions(+), 10 deletions(-) diff --git a/src/main/groovy/com/blogspot/przybyszd/mockserver/ContextExecutor.groovy b/src/main/groovy/com/blogspot/przybyszd/mockserver/ContextExecutor.groovy index a83efe1..43ce61c 100644 --- a/src/main/groovy/com/blogspot/przybyszd/mockserver/ContextExecutor.groovy +++ b/src/main/groovy/com/blogspot/przybyszd/mockserver/ContextExecutor.groovy @@ -19,14 +19,27 @@ class ContextExecutor { ex.sendResponseHeaders(200, 0) String input = ex.requestBody.text println "Mock received input" - GPathResult xml = new XmlSlurper().parseText(input) + GPathResult inputXml = new XmlSlurper().parseText(input) for (Mock mock : mocks){ - if(mock.predicate(xml)){ - println "Mock ${mock.name} invoked" - ++mock.counter - ex.responseBody << mock.responseOk(xml) - ex.responseBody.close() - return + GPathResult xml = inputXml + try { + if (mock.soap) { + if(xml.name() == 'Envelope' && xml.Body.size() > 0){ + xml = getSoapBodyContent(xml) + }else{ + continue + } + } + if (xml != null && mock.predicate(xml)) { + println "Mock ${mock.name} invoked" + ++mock.counter + String response = mock.responseOk(xml) + ex.responseBody << (mock.soap ? wrapSoap(response) : response) + ex.responseBody.close() + return + } + }catch (Exception e){ + e.printStackTrace() } } ex.responseBody << "" @@ -34,6 +47,10 @@ class ContextExecutor { }) } + private static GPathResult getSoapBodyContent(GPathResult xml) { + return xml.Body.'**'[1] + } + int removeMock(String name) { Mock mock = mocks.find {it.name == name} if(mock){ @@ -41,4 +58,11 @@ class ContextExecutor { } return mock.counter } + + private static String wrapSoap(String request) { + """ + + ${request} + """ + } } diff --git a/src/main/groovy/com/blogspot/przybyszd/mockserver/HttpMockServer.groovy b/src/main/groovy/com/blogspot/przybyszd/mockserver/HttpMockServer.groovy index b1dacc4..8e65820 100644 --- a/src/main/groovy/com/blogspot/przybyszd/mockserver/HttpMockServer.groovy +++ b/src/main/groovy/com/blogspot/przybyszd/mockserver/HttpMockServer.groovy @@ -43,7 +43,8 @@ class HttpMockServer { int mockPort = Integer.valueOf(request.port as String) Closure predicate = Eval.me(request.predicate as String) as Closure Closure okResponse = Eval.me(request.response as String) as Closure - Mock mock = new Mock(name, predicate, okResponse) + boolean soap = Boolean.valueOf(request.soap as String) + Mock mock = new Mock(name, predicate, okResponse, soap) HttpServerWraper child = childServers.find { it.port == mockPort } if (!child) { child = new HttpServerWraper(mockPort) diff --git a/src/main/groovy/com/blogspot/przybyszd/mockserver/Mock.groovy b/src/main/groovy/com/blogspot/przybyszd/mockserver/Mock.groovy index 4f6e743..f85386a 100644 --- a/src/main/groovy/com/blogspot/przybyszd/mockserver/Mock.groovy +++ b/src/main/groovy/com/blogspot/przybyszd/mockserver/Mock.groovy @@ -7,13 +7,14 @@ class Mock { final String name final Closure predicate final Closure responseOk + final boolean soap //TODO add http method - //TODO add is soap method int counter = 0 - Mock(String name, Closure predicate, Closure responseOk) { + Mock(String name, Closure predicate, Closure responseOk, boolean soap) { this.name = name this.predicate = predicate this.responseOk = responseOk + this.soap = soap } }