use of com.predic8.membrane.core.rules.SOAPProxy in project service-proxy by membrane.
the class UnavailableSoapProxyTest method setup.
@Before
public void setup() {
r = new Router();
HttpClientConfiguration httpClientConfig = new HttpClientConfiguration();
httpClientConfig.setMaxRetries(1);
r.setHttpClientConfig(httpClientConfig);
r.setHotDeploy(false);
r.setRetryInit(true);
sp = new SOAPProxy();
sp.setPort(2000);
sp.setWsdl("http://localhost:2001/axis2/services/BLZService?wsdl");
sp3 = new ServiceProxy();
sp3.setPort(2000);
sp3.setTarget(new AbstractServiceProxy.Target("localhost", 2001));
ValidatorInterceptor v = new ValidatorInterceptor();
v.setWsdl("http://localhost:2001/axis2/services/BLZService?wsdl");
sp3.getInterceptors().add(v);
SOAPProxy sp2 = new SOAPProxy();
sp2.setPort(2001);
sp2.setWsdl("http://www.thomas-bayer.com/axis2/services/BLZService?wsdl");
r2 = new Router();
r2.setHotDeploy(false);
r2.getRules().add(sp2);
// r2 will be started during the test
}
use of com.predic8.membrane.core.rules.SOAPProxy 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);
}
}
Aggregations