Search in sources :

Example 21 with Key

use of com.predic8.membrane.core.interceptor.apimanagement.Key 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);
    }
}
Also used : MalformedURLException(java.net.MalformedURLException) UnknownHostException(java.net.UnknownHostException) Definitions(com.predic8.wsdl.Definitions) Port(com.predic8.wsdl.Port) Service(com.predic8.wsdl.Service) URL(java.net.URL) ResourceRetrievalException(com.predic8.membrane.core.resolver.ResourceRetrievalException) ConnectException(java.net.ConnectException) MalformedURLException(java.net.MalformedURLException) UnknownHostException(java.net.UnknownHostException) ResourceRetrievalException(com.predic8.membrane.core.resolver.ResourceRetrievalException) SSLParser(com.predic8.membrane.core.config.security.SSLParser) WSDLParser(com.predic8.wsdl.WSDLParser) WSDLParserContext(com.predic8.wsdl.WSDLParserContext) ConnectException(java.net.ConnectException)

Example 22 with Key

use of com.predic8.membrane.core.interceptor.apimanagement.Key in project service-proxy by membrane.

the class SwaggerProxy method init.

@Override
public void init() throws Exception {
    super.init();
    // download swaggerUrl
    HttpClient hc = new HttpClient(router.getHttpClientConfig());
    Exchange ex = hc.call(new Request.Builder().get(swaggerUrl).buildExchange());
    if (ex.getResponse().getStatusCode() != 200) {
        log.error("Couldn't fetch Swagger URL!");
        throw new Exception("Couldn't fetch Swagger URL!");
    }
    // parse swaggerUrl
    swagger = new SwaggerParser().parse(ex.getResponse().getBodyAsStringDecoded());
    // pass swagger specification to Swagger Key
    ((SwaggerProxyKey) key).setSwagger(swagger);
    ((SwaggerProxyKey) key).setAllowUI(allowUI);
    // add interceptor to position 0.
    SwaggerRewriterInterceptor sri = new SwaggerRewriterInterceptor(swagger, swaggerUrl);
    interceptors.add(0, sri);
}
Also used : Exchange(com.predic8.membrane.core.exchange.Exchange) SwaggerParser(io.swagger.parser.SwaggerParser) HttpClient(com.predic8.membrane.core.transport.http.HttpClient) Request(com.predic8.membrane.core.http.Request) SwaggerRewriterInterceptor(com.predic8.membrane.core.interceptor.swagger.SwaggerRewriterInterceptor)

Aggregations

Policy (com.predic8.membrane.core.interceptor.apimanagement.policy.Policy)5 RuleKey (com.predic8.membrane.core.rules.RuleKey)3 ServiceProxy (com.predic8.membrane.core.rules.ServiceProxy)3 ServiceProxyKey (com.predic8.membrane.core.rules.ServiceProxyKey)3 IOException (java.io.IOException)3 AbstractExchange (com.predic8.membrane.core.exchange.AbstractExchange)2 Request (com.predic8.membrane.core.http.Request)2 Key (com.predic8.membrane.core.interceptor.apimanagement.Key)2 ResourceRetrievalException (com.predic8.membrane.core.resolver.ResourceRetrievalException)2 StatisticCollector (com.predic8.membrane.core.rules.StatisticCollector)2 MalformedURLException (java.net.MalformedURLException)2 MCAttribute (com.predic8.membrane.annot.MCAttribute)1 MCChildElement (com.predic8.membrane.annot.MCChildElement)1 MCElement (com.predic8.membrane.annot.MCElement)1 MCOtherAttributes (com.predic8.membrane.annot.MCOtherAttributes)1 MCTextContent (com.predic8.membrane.annot.MCTextContent)1 MainInfo (com.predic8.membrane.annot.model.MainInfo)1 HttpRouter (com.predic8.membrane.core.HttpRouter)1 SSLParser (com.predic8.membrane.core.config.security.SSLParser)1 Exchange (com.predic8.membrane.core.exchange.Exchange)1