Search in sources :

Example 26 with Header

use of com.predic8.membrane.core.http.Header in project service-proxy by membrane.

the class HTTPSchemaResolver method resolve.

public InputStream resolve(String url) throws ResourceRetrievalException {
    try {
        Exchange exc = new Request.Builder().method(Request.METHOD_GET).url(uriFactory, url).header(Header.USER_AGENT, Constants.PRODUCT_NAME + " " + Constants.VERSION).buildExchange();
        Response response = getHttpClient().call(exc).getResponse();
        response.readBody();
        if (response.getStatusCode() != 200) {
            ResourceRetrievalException rde = new ResourceRetrievalException(url, response.getStatusCode());
            throw rde;
        }
        return new ByteArrayInputStream(ByteUtil.getByteArrayData(response.getBodyAsStreamDecoded()));
    } catch (ResourceRetrievalException e) {
        throw e;
    } catch (Exception e) {
        ResourceRetrievalException rre = new ResourceRetrievalException(url, e);
        throw rre;
    }
}
Also used : Exchange(com.predic8.membrane.core.exchange.Exchange) Response(com.predic8.membrane.core.http.Response) ByteArrayInputStream(java.io.ByteArrayInputStream) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException)

Example 27 with Header

use of com.predic8.membrane.core.http.Header in project service-proxy by membrane.

the class SoapOperationExtractorTest method getExchange.

private Exchange getExchange(String path) throws IOException {
    Exchange exc = new Exchange(null);
    Request req = new Request();
    req.create("POST", "http://test", "HTTP/", new Header(), getClass().getClassLoader().getResourceAsStream(path));
    exc.setRequest(req);
    return exc;
}
Also used : Exchange(com.predic8.membrane.core.exchange.Exchange) Header(com.predic8.membrane.core.http.Header) Request(com.predic8.membrane.core.http.Request)

Example 28 with Header

use of com.predic8.membrane.core.http.Header in project service-proxy by membrane.

the class OAuth2ResourceTest method testUseRefreshTokenOnTokenExpiration.

// this test also implicitly tests concurrency on oauth2resource
@Test
public void testUseRefreshTokenOnTokenExpiration() throws Exception {
    HttpRouter mockAuthServer = new HttpRouter();
    mockAuthServer.getRuleManager().addProxyAndOpenPortIfNew(getMockAuthServiceProxy());
    mockAuthServer.init();
    HttpRouter oauth2Resource = new HttpRouter();
    oauth2Resource.getRuleManager().addProxyAndOpenPortIfNew(getConfiguredOAuth2Resource());
    oauth2Resource.init();
    HttpClient httpClient = new HttpClient();
    Exchange excCallResource = new Request.Builder().get(getClientAddress()).buildExchange();
    excCallResource = httpClient.call(excCallResource);
    String cookie = excCallResource.getResponse().getHeader().getFirstValue("Set-Cookie");
    Exchange excFollowRedirectToAuth = new Request.Builder().header("Cookie", cookie).get(excCallResource.getResponse().getHeader().getFirstValue("Location")).buildExchange();
    excFollowRedirectToAuth = httpClient.call(excFollowRedirectToAuth);
    Exchange excFollowRedirectToClient = new Request.Builder().header("Cookie", cookie).get(excFollowRedirectToAuth.getResponse().getHeader().getFirstValue("Location")).buildExchange();
    excFollowRedirectToClient = httpClient.call(excFollowRedirectToClient);
    Set<String> accessTokens = new HashSet<>();
    int limit = 1000;
    List<Thread> threadList = new ArrayList<>();
    CountDownLatch cdl = new CountDownLatch(limit);
    for (int i = 0; i < limit; i++) {
        threadList.add(new Thread(() -> {
            try {
                cdl.countDown();
                cdl.await();
                Exchange excCallResource2 = new Request.Builder().get(getClientAddress()).header("Cookie", cookie).buildExchange();
                excCallResource2 = httpClient.call(excCallResource2);
                synchronized (accessTokens) {
                    accessTokens.add(excCallResource2.getResponse().getBodyAsStringDecoded());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }));
    }
    threadList.forEach(thread -> thread.start());
    threadList.forEach(thread -> {
        try {
            thread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    });
    assertTrue(accessTokens.size() == limit);
}
Also used : Request(com.predic8.membrane.core.http.Request) CountDownLatch(java.util.concurrent.CountDownLatch) IOException(java.io.IOException) Exchange(com.predic8.membrane.core.exchange.Exchange) HttpClient(com.predic8.membrane.core.transport.http.HttpClient) HttpRouter(com.predic8.membrane.core.HttpRouter) Test(org.junit.Test)

Example 29 with Header

use of com.predic8.membrane.core.http.Header in project service-proxy by membrane.

the class ResolverTestTriggerTest method handleRequest.

@Override
public Outcome handleRequest(Exchange exc) {
    try {
        Class<?> clazz = Class.forName("com.predic8.membrane.core.resolver.ResolverTest");
        clazz.getField("deployment").set(null, "J2EE");
        Object value = router.getResolverMap().getFileSchemaResolver();
        Object resolverMap = clazz.getField("resolverMap").get(null);
        resolverMap.getClass().getMethod("addSchemaResolver", SchemaResolver.class).invoke(resolverMap, value);
        Parameterized p = new Parameterized(clazz);
        JUnitCore c = new JUnitCore();
        Result run = c.run(Request.runner(p));
        StringBuilder sb = new StringBuilder();
        sb.append(MAGIC);
        for (Failure f : run.getFailures()) {
            sb.append(f.toString());
            StringWriter stringWriter = new StringWriter();
            f.getException().printStackTrace(new PrintWriter(stringWriter));
            sb.append(stringWriter.toString());
            sb.append("\n");
            sb.append("\n");
        }
        exc.setResponse(Response.ok().header(Header.CONTENT_TYPE, MimeType.TEXT_PLAIN_UTF8).body(sb.toString()).build());
    } catch (Throwable t) {
        LOG.error(t.getMessage(), t);
    }
    return Outcome.RETURN;
}
Also used : Parameterized(org.junit.runners.Parameterized) JUnitCore(org.junit.runner.JUnitCore) StringWriter(java.io.StringWriter) SchemaResolver(com.predic8.membrane.core.resolver.SchemaResolver) Failure(org.junit.runner.notification.Failure) Result(org.junit.runner.Result) PrintWriter(java.io.PrintWriter)

Example 30 with Header

use of com.predic8.membrane.core.http.Header in project service-proxy by membrane.

the class AttributeInfo method analyze.

private void analyze(Types typeUtils) {
    if (// already analyzed?
    xsdType != null)
        return;
    if (getE().getParameters().size() != 1)
        throw new ProcessingException("Setter is supposed to have 1 parameter.", getE());
    VariableElement ve = getE().getParameters().get(0);
    switch(ve.asType().getKind()) {
        case INT:
            xsdType = "spel_number";
            return;
        case LONG:
            xsdType = "spel_number";
            return;
        case BOOLEAN:
            xsdType = "spel_boolean";
            return;
        case DECLARED:
            TypeElement e = (TypeElement) typeUtils.asElement(ve.asType());
            if (e.getQualifiedName().toString().equals("java.lang.String")) {
                xsdType = "xsd:string";
                return;
            }
            if (e.getSuperclass().getKind() == TypeKind.DECLARED) {
                TypeElement superClass = ((TypeElement) typeUtils.asElement(e.getSuperclass()));
                if (superClass.getQualifiedName().toString().equals("java.lang.Enum")) {
                    isEnum = true;
                    // TODO: restriction, but be carefull about Spring EL usage, for example "#{config.XXX}"
                    xsdType = "xsd:string";
                    /*
					 *	<xsd:attribute name=\"target\" use=\"optional\" default=\"body\">\r\n" +
					 *		<xsd:simpleType>\r\n" +
					 *			<xsd:restriction base=\"xsd:string\">\r\n" +
					 *				<xsd:enumeration value=\"body\" />\r\n" +
					 *				<xsd:enumeration value=\"header\" />\r\n" +
					 *			</xsd:restriction>\r\n" +
					 *		</xsd:simpleType>\r\n" +
					 *	</xsd:attribute>\r\n"
					 */
                    return;
                }
            }
            isBeanReference = true;
            xsdType = "xsd:string";
            return;
        default:
            throw new ProcessingException("Not implemented: XSD type for " + ve.asType().getKind().toString(), this.getE());
    }
}
Also used : TypeElement(javax.lang.model.element.TypeElement) VariableElement(javax.lang.model.element.VariableElement) ProcessingException(com.predic8.membrane.annot.ProcessingException)

Aggregations

Exchange (com.predic8.membrane.core.exchange.Exchange)26 Header (com.predic8.membrane.core.http.Header)16 Request (com.predic8.membrane.core.http.Request)13 IOException (java.io.IOException)13 Response (com.predic8.membrane.core.http.Response)12 CacheBuilder (com.google.common.cache.CacheBuilder)8 Test (org.junit.Test)8 AbstractExchange (com.predic8.membrane.core.exchange.AbstractExchange)7 HttpClient (com.predic8.membrane.core.transport.http.HttpClient)6 UnknownHostException (java.net.UnknownHostException)6 MCElement (com.predic8.membrane.annot.MCElement)5 JsonGenerator (com.fasterxml.jackson.core.JsonGenerator)4 AbstractExchangeSnapshot (com.predic8.membrane.core.exchange.snapshots.AbstractExchangeSnapshot)4 DynamicAbstractExchangeSnapshot (com.predic8.membrane.core.exchange.snapshots.DynamicAbstractExchangeSnapshot)4 HeaderField (com.predic8.membrane.core.http.HeaderField)4 JsonFactory (com.fasterxml.jackson.core.JsonFactory)3 ByteArrayOutputStream (java.io.ByteArrayOutputStream)3 DateTimeFormatter (org.joda.time.format.DateTimeFormatter)3 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)2 Cache (com.google.common.cache.Cache)2