Search in sources :

Example 1 with CachingConfig

use of io.apiman.gateway.engine.policies.config.CachingConfig in project apiman by apiman.

the class CachingPolicy method responseDataHandler.

/**
 * @see io.apiman.gateway.engine.policies.AbstractMappedDataPolicy#responseDataHandler(io.apiman.gateway.engine.beans.ApiResponse, io.apiman.gateway.engine.policy.IPolicyContext, java.lang.Object)
 */
@Deprecated
@Override
protected IReadWriteStream<ApiResponse> responseDataHandler(final ApiResponse response, IPolicyContext context, CachingConfig policyConfiguration) {
    // Possibly cache the response for future posterity.
    // Check the response code against list in config (empty/null list means cache all).
    final boolean shouldCache = (context.getAttribute(SHOULD_CACHE_ATTR, Boolean.FALSE) && ofNullable(policyConfiguration.getStatusCodes()).map(statusCodes -> statusCodes.isEmpty() || statusCodes.contains(String.valueOf(response.getCode()))).orElse(true));
    if (shouldCache) {
        try {
            String cacheId = context.getAttribute(CACHE_ID_ATTR, null);
            ICacheStoreComponent cache = context.getComponent(ICacheStoreComponent.class);
            final ISignalWriteStream writeStream = cache.putBinary(cacheId, response, policyConfiguration.getTtl());
            return new AbstractStream<ApiResponse>() {

                @Override
                public ApiResponse getHead() {
                    return response;
                }

                @Override
                protected void handleHead(ApiResponse head) {
                }

                @Override
                public void write(IApimanBuffer chunk) {
                    writeStream.write(chunk);
                    super.write(chunk);
                }

                @Override
                public void end() {
                    writeStream.end();
                    super.end();
                }
            };
        } catch (ComponentNotFoundException | IOException e) {
            // TODO log error
            return null;
        }
    } else {
        return null;
    }
}
Also used : IDataPolicy(io.apiman.gateway.engine.policy.IDataPolicy) ISignalReadStream(io.apiman.gateway.engine.io.ISignalReadStream) Optional.ofNullable(java.util.Optional.ofNullable) CacheConnectorInterceptor(io.apiman.gateway.engine.policies.caching.CacheConnectorInterceptor) IOException(java.io.IOException) ApiResponse(io.apiman.gateway.engine.beans.ApiResponse) CachingConfig(io.apiman.gateway.engine.policies.config.CachingConfig) IPolicyChain(io.apiman.gateway.engine.policy.IPolicyChain) ApiRequest(io.apiman.gateway.engine.beans.ApiRequest) IAsyncResult(io.apiman.gateway.engine.async.IAsyncResult) AbstractStream(io.apiman.gateway.engine.io.AbstractStream) IConnectorInterceptor(io.apiman.gateway.engine.policy.IConnectorInterceptor) IAsyncResultHandler(io.apiman.gateway.engine.async.IAsyncResultHandler) IApimanBuffer(io.apiman.gateway.engine.io.IApimanBuffer) ComponentNotFoundException(io.apiman.gateway.engine.beans.exceptions.ComponentNotFoundException) IReadWriteStream(io.apiman.gateway.engine.io.IReadWriteStream) IPolicyContext(io.apiman.gateway.engine.policy.IPolicyContext) ICacheStoreComponent(io.apiman.gateway.engine.components.ICacheStoreComponent) ISignalWriteStream(io.apiman.gateway.engine.io.ISignalWriteStream) CachedResponse(io.apiman.gateway.engine.impl.CachedResponse) IApimanBuffer(io.apiman.gateway.engine.io.IApimanBuffer) ComponentNotFoundException(io.apiman.gateway.engine.beans.exceptions.ComponentNotFoundException) AbstractStream(io.apiman.gateway.engine.io.AbstractStream) IOException(java.io.IOException) ISignalWriteStream(io.apiman.gateway.engine.io.ISignalWriteStream) ICacheStoreComponent(io.apiman.gateway.engine.components.ICacheStoreComponent) ApiResponse(io.apiman.gateway.engine.beans.ApiResponse)

Example 2 with CachingConfig

use of io.apiman.gateway.engine.policies.config.CachingConfig in project apiman by apiman.

the class CachingPolicyConfigTest method testParseConfiguration.

/**
 * Test method for {@link io.apiman.gateway.engine.policies.CachingPolicy#parseConfiguration(java.lang.String)}.
 */
@Test
public void testParseConfiguration() {
    CachingPolicy policy = new CachingPolicy();
    // Empty config test
    String config = "{}";
    Object parsed = policy.parseConfiguration(config);
    Assert.assertNotNull(parsed);
    Assert.assertEquals(CachingConfig.class, parsed.getClass());
    CachingConfig parsedConfig = (CachingConfig) parsed;
    Assert.assertEquals(0, parsedConfig.getTtl());
    // Sample real config
    config = "{\n" + "  \"ttl\" : 12345\n" + "}";
    parsed = policy.parseConfiguration(config);
    parsedConfig = (CachingConfig) parsed;
    Assert.assertEquals(12345L, parsedConfig.getTtl());
}
Also used : CachingConfig(io.apiman.gateway.engine.policies.config.CachingConfig) Test(org.junit.Test)

Aggregations

CachingConfig (io.apiman.gateway.engine.policies.config.CachingConfig)2 IAsyncResult (io.apiman.gateway.engine.async.IAsyncResult)1 IAsyncResultHandler (io.apiman.gateway.engine.async.IAsyncResultHandler)1 ApiRequest (io.apiman.gateway.engine.beans.ApiRequest)1 ApiResponse (io.apiman.gateway.engine.beans.ApiResponse)1 ComponentNotFoundException (io.apiman.gateway.engine.beans.exceptions.ComponentNotFoundException)1 ICacheStoreComponent (io.apiman.gateway.engine.components.ICacheStoreComponent)1 CachedResponse (io.apiman.gateway.engine.impl.CachedResponse)1 AbstractStream (io.apiman.gateway.engine.io.AbstractStream)1 IApimanBuffer (io.apiman.gateway.engine.io.IApimanBuffer)1 IReadWriteStream (io.apiman.gateway.engine.io.IReadWriteStream)1 ISignalReadStream (io.apiman.gateway.engine.io.ISignalReadStream)1 ISignalWriteStream (io.apiman.gateway.engine.io.ISignalWriteStream)1 CacheConnectorInterceptor (io.apiman.gateway.engine.policies.caching.CacheConnectorInterceptor)1 IConnectorInterceptor (io.apiman.gateway.engine.policy.IConnectorInterceptor)1 IDataPolicy (io.apiman.gateway.engine.policy.IDataPolicy)1 IPolicyChain (io.apiman.gateway.engine.policy.IPolicyChain)1 IPolicyContext (io.apiman.gateway.engine.policy.IPolicyContext)1 IOException (java.io.IOException)1 Optional.ofNullable (java.util.Optional.ofNullable)1