package com.github.jaceko.circuitswitcher.it.util.mock; import com.github.jaceko.circuitswitcher.it.util.xml.XmlParser; import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.xml.sax.SAXException; import java.io.IOException; public class WebserviceMockControler { private static final Logger LOG = LoggerFactory.getLogger(WebserviceMockControler.class); private MockService mockServiceProxy; public WebserviceMockControler(String mockServiceRootAddress) { JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean(); bean.setAddress(mockServiceRootAddress); bean.setResourceClass(MockService.class); mockServiceProxy = bean.create(MockService.class); } public MockServiceOperation webserviceOperation(WebserviceOperation mockedOperation) { return new MockServiceOperation("SOAP", mockServiceProxy, mockedOperation); } public static class MockServiceOperation { MockService mockServiceProxy; String serviceType; WebserviceOperation mockedOperation; public MockServiceOperation(String serviceType, MockService mockServiceProxy, WebserviceOperation mockedOperation) { super(); this.serviceType = serviceType; this.mockServiceProxy = mockServiceProxy; this.mockedOperation = mockedOperation; } public void setUp(MockResponseBuilder mockResponse) { mockServiceProxy.setupResponse(serviceType, mockedOperation.getServiceName(), mockedOperation.getOperationId(), mockResponse.responseDelay(), mockResponse.build()); } public void init() { try { mockServiceProxy.init(serviceType, mockedOperation.getServiceName(), mockedOperation.getOperationId()); } catch (Throwable e) { LOG.warn("mock init failed: " + e); } } public Document recordedRequests() throws SAXException, IOException { String recordedRequests = mockServiceProxy.getRecordedRequests(serviceType, mockedOperation.getServiceName(), mockedOperation.getOperationId()); return XmlParser.parse(recordedRequests); } } }