use of com.predic8.membrane.core.rules.ServiceProxy in project service-proxy by membrane.
the class LoadBalancingInterceptorTest method setUp.
@Before
public void setUp() throws Exception {
service1 = new HttpRouter();
mockInterceptor1 = new DummyWebServiceInterceptor();
ServiceProxy sp1 = new ServiceProxy(new ServiceProxyKey("localhost", "POST", ".*", 2000), "thomas-bayer.com", 80);
sp1.getInterceptors().add(new AbstractInterceptor() {
@Override
public Outcome handleResponse(Exchange exc) throws Exception {
exc.getResponse().getHeader().add("Connection", "close");
return Outcome.CONTINUE;
}
});
sp1.getInterceptors().add(mockInterceptor1);
service1.getRuleManager().addProxyAndOpenPortIfNew(sp1);
service1.init();
service2 = new HttpRouter();
mockInterceptor2 = new DummyWebServiceInterceptor();
ServiceProxy sp2 = new ServiceProxy(new ServiceProxyKey("localhost", "POST", ".*", 3000), "thomas-bayer.com", 80);
sp2.getInterceptors().add(new AbstractInterceptor() {
@Override
public Outcome handleResponse(Exchange exc) throws Exception {
exc.getResponse().getHeader().add("Connection", "close");
return Outcome.CONTINUE;
}
});
sp2.getInterceptors().add(mockInterceptor2);
service2.getRuleManager().addProxyAndOpenPortIfNew(sp2);
service2.init();
balancer = new HttpRouter();
ServiceProxy sp3 = new ServiceProxy(new ServiceProxyKey("localhost", "POST", ".*", 7000), "thomas-bayer.com", 80);
balancingInterceptor = new LoadBalancingInterceptor();
balancingInterceptor.setName("Default");
sp3.getInterceptors().add(balancingInterceptor);
balancer.getRuleManager().addProxyAndOpenPortIfNew(sp3);
enableFailOverOn5XX(balancer);
balancer.init();
BalancerUtil.lookupBalancer(balancer, "Default").up("Default", "localhost", 2000);
BalancerUtil.lookupBalancer(balancer, "Default").up("Default", "localhost", 3000);
roundRobinStrategy = new RoundRobinStrategy();
byThreadStrategy = new ByThreadStrategy();
}
use of com.predic8.membrane.core.rules.ServiceProxy in project service-proxy by membrane.
the class QuickstartSOAPTest method doit.
@Test
public void doit() throws IOException, InterruptedException {
File baseDir = getExampleDir("quickstart-soap");
Process2 sl = new Process2.Builder().in(baseDir).script("service-proxy").waitForMembrane().start();
try {
ProxiesXmlUtil pxu = new ProxiesXmlUtil(new File(baseDir, "proxies.xml"));
pxu.updateWith("<spring:beans xmlns=\"http://membrane-soa.org/proxies/1/\"\r\n" + " xmlns:spring=\"http://www.springframework.org/schema/beans\"\r\n" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n" + " xsi:schemaLocation=\"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd\r\n" + " http://membrane-soa.org/proxies/1/ http://membrane-soa.org/schemas/proxies-1.xsd\">\r\n" + "\r\n" + " <router>\r\n" + " \r\n" + " <soapProxy port=\"2000\" wsdl=\"http://www.thomas-bayer.com/axis2/services/BLZService?wsdl\">\r\n" + " <path>/MyBLZService</path>\r\n" + " </soapProxy>\r\n" + " \r\n" + " <serviceProxy port=\"9000\">\r\n" + " <basicAuthentication>\r\n" + " <user name=\"admin\" password=\"membrane\" />\r\n" + " </basicAuthentication> \r\n" + " <adminConsole />\r\n" + " </serviceProxy>\r\n" + " \r\n" + " </router>\r\n" + "</spring:beans>", sl);
String endpoint = "http://localhost:2000/MyBLZService";
String result = getAndAssert200(endpoint + "?wsdl");
assertContains("wsdl:documentation", result);
// assert that rewriting did take place
assertContains("localhost:2000/MyBLZService", result);
result = AssertUtils.postAndAssert200(endpoint, "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:blz=\"http://thomas-bayer.com/blz/\">\r\n" + " <soapenv:Header/>\r\n" + " <soapenv:Body>\r\n" + " <blz:getBank>\r\n" + " <blz:blz>37050198</blz:blz>\r\n" + " </blz:getBank>\r\n" + " </soapenv:Body>\r\n" + "</soapenv:Envelope>");
assertContains("Sparkasse", result);
AssertUtils.setupHTTPAuthentication("localhost", 9000, "admin", "membrane");
result = getAndAssert200("http://localhost:9000/admin/");
result.contains("BLZService");
String invalidRequest = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:blz=\"http://thomas-bayer.com/blz/\">\r\n" + " <soapenv:Header/>\r\n" + " <soapenv:Body>\r\n" + " <blz:getBank>\r\n" + " <blz:blz>37050198</blz:blz>\r\n" + " <foo />\r\n" + " </blz:getBank>\r\n" + " </soapenv:Body>\r\n" + "</soapenv:Envelope>";
result = postAndAssert(500, endpoint, invalidRequest);
assertContains(".java:", result);
AssertUtils.closeConnections();
AssertUtils.setupHTTPAuthentication("localhost", 9000, "admin", "membrane");
pxu.updateWith("<spring:beans xmlns=\"http://membrane-soa.org/proxies/1/\"\r\n" + " xmlns:spring=\"http://www.springframework.org/schema/beans\"\r\n" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n" + " xsi:schemaLocation=\"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd\r\n" + " http://membrane-soa.org/proxies/1/ http://membrane-soa.org/schemas/proxies-1.xsd\">\r\n" + "\r\n" + " <router>\r\n" + " \r\n" + " <soapProxy port=\"2000\" wsdl=\"http://www.thomas-bayer.com/axis2/services/BLZService?wsdl\">\r\n" + " <path>/MyBLZService</path>\r\n" + " <soapStackTraceFilter/>\r\n" + " </soapProxy>\r\n" + " \r\n" + " <serviceProxy port=\"9000\">\r\n" + " <basicAuthentication>\r\n" + " <user name=\"admin\" password=\"membrane\" />\r\n" + " </basicAuthentication> \r\n" + " <adminConsole />\r\n" + " </serviceProxy>\r\n" + " \r\n" + " </router>\r\n" + "</spring:beans>", sl);
result = postAndAssert(500, endpoint, invalidRequest);
assertContainsNot(".java:", result);
AssertUtils.closeConnections();
AssertUtils.setupHTTPAuthentication("localhost", 9000, "admin", "membrane");
pxu.updateWith("<spring:beans xmlns=\"http://membrane-soa.org/proxies/1/\"\r\n" + " xmlns:spring=\"http://www.springframework.org/schema/beans\"\r\n" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n" + " xsi:schemaLocation=\"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd\r\n" + " http://membrane-soa.org/proxies/1/ http://membrane-soa.org/schemas/proxies-1.xsd\">\r\n" + "\r\n" + " <router>\r\n" + " \r\n" + " <soapProxy port=\"2000\" wsdl=\"http://www.thomas-bayer.com/axis2/services/BLZService?wsdl\">\r\n" + " <path>/MyBLZService</path>\r\n" + " <soapStackTraceFilter/>\r\n" + " <validator/>\r\n" + " </soapProxy>\r\n" + " \r\n" + " <serviceProxy port=\"9000\">\r\n" + " <basicAuthentication>\r\n" + " <user name=\"admin\" password=\"membrane\" />\r\n" + " </basicAuthentication> \r\n" + " <adminConsole />\r\n" + " </serviceProxy>\r\n" + " \r\n" + " </router>\r\n" + "</spring:beans>", sl);
result = postAndAssert(400, endpoint, invalidRequest);
assertContains("Validation failed", result);
result = getAndAssert200("http://localhost:9000/admin/service-proxy/show?name=BLZService%3A2000");
result.contains("1 of 1 messages have been invalid");
result = getAndAssert200(endpoint);
assertContains("Target Namespace", result);
result = getAndAssert200(endpoint + "/operation/BLZServiceSOAP11Binding/BLZServicePortType/getBank");
assertContains("blz>?XXX?", result);
AssertUtils.closeConnections();
pxu.updateWith("<spring:beans xmlns=\"http://membrane-soa.org/proxies/1/\"\r\n" + " xmlns:spring=\"http://www.springframework.org/schema/beans\"\r\n" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n" + " xsi:schemaLocation=\"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd\r\n" + " http://membrane-soa.org/proxies/1/ http://membrane-soa.org/schemas/proxies-1.xsd\">\r\n" + "\r\n" + " <router>\r\n" + " \r\n" + " <soapProxy port=\"2000\" wsdl=\"http://www.thomas-bayer.com/axis2/services/BLZService?wsdl\">\r\n" + " <path>/MyBLZService</path>\r\n" + " <soapStackTraceFilter/>\r\n" + " <validator/>\r\n" + " </soapProxy>\r\n" + " \r\n" + " <serviceProxy port=\"9000\">\r\n" + " <basicAuthentication>\r\n" + " <user name=\"admin\" password=\"membrane\" />\r\n" + " </basicAuthentication> \r\n" + " <adminConsole />\r\n" + " </serviceProxy>\r\n" + " \r\n" + " <serviceProxy port=\"2000\">\r\n" + " <index />\r\n" + " </serviceProxy>\r\n" + " \r\n" + " </router>\r\n" + "</spring:beans>", sl);
result = getAndAssert200("http://localhost:2000");
assertContains("/MyBLZService", result);
} finally {
sl.killScript();
}
}
use of com.predic8.membrane.core.rules.ServiceProxy in project service-proxy by membrane.
the class EtcdBasedConfigurator method shutDownRunningModuleServiceProxy.
private void shutDownRunningModuleServiceProxy(String module) {
log.info("Destroying serviceProxy for module: " + module);
ServiceProxy sp = runningServiceProxyForModule.get(module);
router.getRuleManager().removeRule(sp);
runningServiceProxyForModule.remove(module);
}
use of com.predic8.membrane.core.rules.ServiceProxy in project service-proxy by membrane.
the class EtcdBasedConfigurator method setUpClusterNode.
private void setUpClusterNode(EtcdNodeInformation node) {
log.info("Creating " + node);
ServiceProxy sp = runningServiceProxyForModule.get(node.getModule());
LoadBalancingInterceptor lbi = (LoadBalancingInterceptor) sp.getInterceptors().get(0);
lbi.getClusterManager().getClusters().get(0).nodeUp(new Node(node.getTargetHost(), Integer.parseInt(node.getTargetPort())));
runningNodesForModule.get(node.getModule()).add(node);
}
use of com.predic8.membrane.core.rules.ServiceProxy in project service-proxy by membrane.
the class DynamicAdminPageInterceptor method handleServiceProxyShowRequest.
@Mapping("/admin/service-proxy/show/?(\\?.*)?")
public Response handleServiceProxyShowRequest(final Map<String, String> params, final String relativeRootPath) throws Exception {
final StringWriter writer = new StringWriter();
final AbstractServiceProxy rule = (AbstractServiceProxy) RuleUtil.findRuleByIdentifier(router, params.get("name"));
return respond(new AdminPageBuilder(writer, router, relativeRootPath, params, readOnly) {
@Override
protected int getSelectedTab() {
return TAB_ID_SERVICE_PROXIES;
}
@Override
protected String getTitle() {
return super.getTitle() + " " + rule.toString() + " ServiceProxy";
}
@Override
protected void createTabContent() throws Exception {
h1().text(rule.toString() + " ServiceProxy").end();
script().raw("$(function() {\r\n" + " $( \"#subtab\" ).tabs();\r\n" + " });").end();
div().id("subtab");
ul();
li().a().href("#tab1").text("Visualization").end(2);
li().a().href("#tab2").text("Statistics").end(2);
// li().a().href("#tab3").text("XML Configuration").end(2);
end();
div().id("tab1");
createServiceProxyVisualization(rule, relativeRootPath);
end();
div().id("tab2");
createStatusCodesTable(rule.getStatisticsByStatusCodes());
br();
createButton("View Messages", "calls", null, createQueryString("proxy", rule.toString()));
end();
end();
}
}.createPage());
}
Aggregations