use of com.predic8.wsdl.Port in project service-proxy by membrane.
the class GroovyInterceptor method logGroovyException.
private void logGroovyException(Flow flow, Exception e) {
try {
ServiceProxy sp = getRule();
log.error("Exception in Groovy script in service proxy '" + sp.getName() + "' on port " + sp.getPort() + " with path " + (sp.getPath() != null ? sp.getPath().getValue() : "*"));
if (flow != null)
log.error("Flow: " + flow.name());
else
log.error("There is possibly a syntax error in the groovy script (compilation error)");
} catch (NoSuchElementException e2) {
// ignore - logging should not break anything
} finally {
e.printStackTrace();
}
}
use of com.predic8.wsdl.Port in project service-proxy by membrane.
the class LoadBalancerBasic1Test method test.
@Test
public void test() throws IOException, InterruptedException {
File base = getExampleDir("loadbalancer-basic-1");
AssertUtils.replaceInFile(new File(base, "proxies.xml"), "8080", "3023");
Process2 sl = new Process2.Builder().in(base).script("service-proxy").waitForMembrane().start();
try {
assertEquals(1, LoadBalancerUtil.getRespondingNode("http://localhost:4000/"));
assertEquals(2, LoadBalancerUtil.getRespondingNode("http://localhost:4001/"));
assertEquals(3, LoadBalancerUtil.getRespondingNode("http://localhost:4002/"));
addLBNodeViaHTML("http://localhost:9000/admin/", "localhost", 4000);
addLBNodeViaHTML("http://localhost:9000/admin/", "localhost", 4001);
Thread.sleep(1000);
assertEquals(1, LoadBalancerUtil.getRespondingNode("http://localhost:3023/service"));
assertEquals(2, LoadBalancerUtil.getRespondingNode("http://localhost:3023/service"));
assertEquals(1, LoadBalancerUtil.getRespondingNode("http://localhost:3023/service"));
assertEquals(2, LoadBalancerUtil.getRespondingNode("http://localhost:3023/service"));
getAndAssert(204, "http://localhost:9010/clustermanager/up?host=localhost&port=4002");
AssertUtils.assertContains("localhost:4002", getAndAssert200("http://localhost:9000/admin/clusters/show?cluster=Default"));
assertEquals(3, LoadBalancerUtil.getRespondingNode("http://localhost:3023/service"));
assertEquals(1, LoadBalancerUtil.getRespondingNode("http://localhost:3023/service"));
assertEquals(2, LoadBalancerUtil.getRespondingNode("http://localhost:3023/service"));
assertEquals(3, LoadBalancerUtil.getRespondingNode("http://localhost:3023/service"));
} finally {
sl.killScript();
}
}
use of com.predic8.wsdl.Port in project service-proxy by membrane.
the class QuickstartRESTTest method doit.
@Test
public void doit() throws IOException, InterruptedException {
File baseDir = getExampleDir("quickstart-rest");
Process2 sl = new Process2.Builder().in(baseDir).script("service-proxy").waitForMembrane().start();
try {
String result = getAndAssert200("http://localhost:2000/restnames/name.groovy?name=Pia");
assertContains("Italy", result);
AssertUtils.closeConnections();
new ProxiesXmlUtil(new File(baseDir, "proxies.xml")).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" + " <serviceProxy name=\"names\" port=\"2000\">\r\n" + " <path isRegExp=\"true\">/(rest)?names.*</path>\r\n" + " <rewriter>\r\n" + " <map from=\"/names/(.*)\" to=\"/restnames/name\\.groovy\\?name=$1\" />\r\n" + " </rewriter>\r\n" + " <statisticsCSV file=\"log.csv\" />\r\n" + " <response>\r\n" + " <regExReplacer regex=\"\\s*,\\s*<\" replace=\"<\" />\r\n" + " <transform xslt=\"restnames.xsl\" />\r\n" + " </response>\r\n" + " <target host=\"thomas-bayer.com\" port=\"80\" />\r\n" + " </serviceProxy>\r\n" + " \r\n" + " <serviceProxy name=\"Console\" port=\"9000\">\r\n" + " <basicAuthentication>\r\n" + " <user name=\"alice\" password=\"membrane\" />\r\n" + " </basicAuthentication> \r\n" + " <adminConsole />\r\n" + " </serviceProxy> \r\n" + " </router>\r\n" + "</spring:beans>", sl);
result = getAndAssert200("http://localhost:2000/names/Pia");
assertContains("Italy, Spain", result);
assertContainsNot(",<", result);
String csvLog = FileUtils.readFileToString(new File(baseDir, "log.csv"));
assertContains("Pia", csvLog);
AssertUtils.setupHTTPAuthentication("localhost", 9000, "alice", "membrane");
result = getAndAssert200("http://localhost:9000/admin/");
assertContains("ServiceProxies", result);
} finally {
sl.killScript();
}
}
use of com.predic8.wsdl.Port in project service-proxy by membrane.
the class SOAPProxy method parseWSDL.
/**
* @return error or null for success
*/
private void parseWSDL() throws Exception {
WSDLParserContext ctx = new WSDLParserContext();
ctx.setInput(ResolverMap.combine(router.getBaseLocation(), wsdl));
try {
WSDLParser wsdlParser = new WSDLParser();
wsdlParser.setResourceResolver(resolverMap.toExternalResolver().toExternalResolver());
Definitions definitions = wsdlParser.parse(ctx);
List<Service> services = definitions.getServices();
if (services.size() != 1)
throw new IllegalArgumentException("There are " + services.size() + " services defined in the WSDL, but exactly 1 is required for soapProxy.");
Service service = services.get(0);
if (StringUtils.isEmpty(name))
name = StringUtils.isEmpty(service.getName()) ? definitions.getName() : service.getName();
List<Port> ports = service.getPorts();
Port port = selectPort(ports, portName);
String location = port.getAddress().getLocation();
if (location == null)
throw new IllegalArgumentException("In the WSDL, there is no @location defined on the port.");
try {
URL url = new URL(location);
target.setHost(url.getHost());
if (url.getPort() != -1)
target.setPort(url.getPort());
else
target.setPort(url.getDefaultPort());
if (key.getPath() == null) {
key.setUsePathPattern(true);
key.setPathRegExp(false);
key.setPath(url.getPath());
} else {
String query = "";
if (url.getQuery() != null) {
query = "?" + url.getQuery();
}
targetPath = url.getPath() + query;
}
if (location.startsWith("https")) {
SSLParser sslOutboundParser = new SSLParser();
target.setSslParser(sslOutboundParser);
}
((ServiceProxyKey) key).setMethod("*");
} catch (MalformedURLException e) {
throw new IllegalArgumentException("WSDL endpoint location '" + location + "' is not an URL.", e);
}
return;
} catch (Exception e) {
Throwable f = e;
while (f.getCause() != null && !(f instanceof ResourceRetrievalException)) f = f.getCause();
if (f instanceof ResourceRetrievalException) {
ResourceRetrievalException rre = (ResourceRetrievalException) f;
if (rre.getStatus() >= 400)
throw rre;
Throwable cause = rre.getCause();
if (cause != null) {
if (cause instanceof UnknownHostException)
throw (UnknownHostException) cause;
else if (cause instanceof ConnectException)
throw (ConnectException) cause;
}
}
throw new IllegalArgumentException("Could not download the WSDL '" + wsdl + "'.", e);
}
}
use of com.predic8.wsdl.Port in project service-proxy by membrane.
the class HttpTransport method closePort.
/**
* Closes the corresponding server port. Note that connections might still be open and exchanges still running after
* this method completes.
*/
public synchronized void closePort(String ip, int port) throws IOException {
IpPort p = new IpPort(ip, port);
log.debug("Closing server port: " + p);
HttpEndpointListener plt = portListenerMapping.get(p);
if (plt == null)
return;
plt.closePort();
try {
plt.join();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
portListenerMapping.remove(p);
stillRunning.add(new WeakReference<HttpEndpointListener>(plt));
for (IPortChangeListener listener : menuListeners) {
listener.removePort(port);
}
}
Aggregations