use of io.gravitee.plugin.policy.PolicyPlugin in project gravitee-management-rest-api by gravitee-io.
the class PolicyServiceImpl method convert.
private PolicyEntity convert(PolicyPlugin policyPlugin, boolean withPlugin) {
PolicyEntity entity = new PolicyEntity();
entity.setId(policyPlugin.id());
entity.setDescription(policyPlugin.manifest().description());
entity.setName(policyPlugin.manifest().name());
entity.setVersion(policyPlugin.manifest().version());
if (withPlugin) {
// Plugin information
Plugin plugin = policyPlugin;
PluginEntity pluginEntity = new PluginEntity();
pluginEntity.setPlugin(plugin.clazz());
pluginEntity.setPath(plugin.path().toString());
pluginEntity.setType(plugin.type().toString().toLowerCase());
pluginEntity.setDependencies(plugin.dependencies());
entity.setPlugin(pluginEntity);
// Policy development information
PolicyDevelopmentEntity developmentEntity = new PolicyDevelopmentEntity();
developmentEntity.setClassName(policyPlugin.policy().getName());
/*
if (policy.configuration() != null) {
developmentEntity.setConfiguration(policyDefinition.configuration().getName());
}
if (policyDefinition.onRequestMethod() != null) {
developmentEntity.setOnRequestMethod(policyDefinition.onRequestMethod().toGenericString());
}
if (policyDefinition.onResponseMethod() != null) {
developmentEntity.setOnResponseMethod(policyDefinition.onResponseMethod().toGenericString());
}
*/
entity.setDevelopment(developmentEntity);
}
return entity;
}
use of io.gravitee.plugin.policy.PolicyPlugin in project gravitee-management-rest-api by gravitee-io.
the class PolicyServiceImpl method findById.
@Override
public PolicyEntity findById(String policyId) {
LOGGER.debug("Find policy by ID: {}", policyId);
PolicyPlugin policyDefinition = policyManager.get(policyId);
if (policyDefinition == null) {
throw new PolicyNotFoundException(policyId);
}
return convert(policyDefinition, true);
}
use of io.gravitee.plugin.policy.PolicyPlugin in project gravitee-gateway by gravitee-io.
the class RequestResponseInvalidContentTest method register.
@Override
public void register(PolicyPluginManager policyPluginManager) {
super.register(policyPluginManager);
PolicyPlugin errorRequestStreamPolicy = PolicyBuilder.build("content-request-error", ValidateRequestPolicy.class);
policyPluginManager.register(errorRequestStreamPolicy);
PolicyPlugin errorResponseStreamPolicy = PolicyBuilder.build("content-response-error", ValidateResponsePolicy.class);
policyPluginManager.register(errorResponseStreamPolicy);
}
use of io.gravitee.plugin.policy.PolicyPlugin in project gravitee-gateway by gravitee-io.
the class TransformRequestContentUsingBuilderGatewayTest method register.
@Override
public void register(PolicyPluginManager policyPluginManager) {
super.register(policyPluginManager);
PolicyPlugin transformRequestContentPolicy = PolicyBuilder.build("transform-request-content", TransformRequestContentUsingBuilderPolicy.class);
policyPluginManager.register(transformRequestContentPolicy);
}
use of io.gravitee.plugin.policy.PolicyPlugin in project gravitee-gateway by gravitee-io.
the class DefaultPolicyManager method initialize.
private void initialize() {
PolicyPluginManager ppm = applicationContext.getBean(PolicyPluginManager.class);
PolicyClassLoaderFactory pclf = applicationContext.getBean(PolicyClassLoaderFactory.class);
ReactorHandler rh = applicationContext.getBean(ReactorHandler.class);
ResourceLifecycleManager rm = applicationContext.getBean(ResourceLifecycleManager.class);
Reactable reactable = rh.reactable();
Set<Policy> requiredPlugins = reactable.dependencies(Policy.class);
requiredPlugins.forEach(policy -> {
final PolicyPlugin policyPlugin = ppm.get(policy.getName());
if (policyPlugin == null) {
logger.error("Policy [{}] can not be found in policy registry", policy.getName());
throw new IllegalStateException("Policy [" + policy.getName() + "] can not be found in policy registry");
}
PluginClassLoader policyClassLoader = null;
// Load dependant resources to enhance policy classloader
Collection<? extends Resource> resources = rm.getResources();
if (!resources.isEmpty()) {
ClassLoader[] resourceClassLoaders = rm.getResources().stream().map(new Function<Resource, ClassLoader>() {
@Override
public ClassLoader apply(Resource resource) {
return resource.getClass().getClassLoader();
}
}).toArray(ClassLoader[]::new);
DelegatingClassLoader parentClassLoader = new DelegatingClassLoader(rh.classloader(), resourceClassLoaders);
policyClassLoader = pclf.getOrCreateClassLoader(policyPlugin, parentClassLoader);
} else {
policyClassLoader = pclf.getOrCreateClassLoader(policyPlugin, rh.classloader());
}
logger.debug("Loading policy {} for {}", policy.getName(), rh);
PolicyMetadataBuilder builder = new PolicyMetadataBuilder();
builder.setId(policyPlugin.id());
try {
// Prepare metadata
Class<?> policyClass = ClassUtils.forName(policyPlugin.policy().getName(), policyClassLoader);
builder.setPolicy(policyClass).setMethods(new PolicyMethodResolver().resolve(policyClass));
if (policyPlugin.configuration() != null) {
builder.setConfiguration((Class<? extends PolicyConfiguration>) ClassUtils.forName(policyPlugin.configuration().getName(), policyClassLoader));
}
// Prepare context if defined
if (policyPlugin.context() != null) {
Class<? extends PolicyContext> policyContextClass = (Class<? extends PolicyContext>) ClassUtils.forName(policyPlugin.context().getName(), policyClassLoader);
// Create policy context instance and initialize context provider (if used)
PolicyContext context = new PolicyContextFactory(reactable).create(policyContextClass);
builder.setContext(context);
}
RegisteredPolicy registeredPolicy = new RegisteredPolicy();
registeredPolicy.classLoader = policyClassLoader;
registeredPolicy.metadata = builder.build();
policies.put(policy.getName(), registeredPolicy);
} catch (Exception ex) {
logger.error("Unable to load policy metadata", ex);
if (policyClassLoader != null) {
try {
policyClassLoader.close();
} catch (IOException ioe) {
logger.error("Unable to close classloader for policy", ioe);
}
}
}
});
}
Aggregations