private ClassLoaderModel getClassLoaderModel(File artifactFolder, Optional<Properties> deploymentProperties, MuleArtifactLoaderDescriptor classLoaderModelLoaderDescriptor, BundleDescriptor bundleDescriptor) { ClassLoaderModelLoader classLoaderModelLoader; try { classLoaderModelLoader = descriptorLoaderRepository.get(classLoaderModelLoaderDescriptor.getId(), getArtifactType(), ClassLoaderModelLoader.class); } catch (LoaderNotFoundException e) { throw new ArtifactDescriptorCreateException(invalidClassLoaderModelIdError(artifactFolder, classLoaderModelLoaderDescriptor)); } final ClassLoaderModel classLoaderModel; try { classLoaderModel = classLoaderModelLoader.load(artifactFolder, getClassLoaderModelAttributes(deploymentProperties, classLoaderModelLoaderDescriptor, bundleDescriptor), getArtifactType()); } catch (InvalidDescriptorLoaderException e) { throw new ArtifactDescriptorCreateException(e); } return classLoaderModel; }
@Override public ServiceDescriptor create(File artifactFolder, Optional<Properties> properties) throws ArtifactDescriptorCreateException { if (!artifactFolder.exists()) { throw new IllegalArgumentException("Service folder does not exists: " + artifactFolder.getAbsolutePath()); } return super.create(artifactFolder, properties); }
@Override public T create(File artifactFolder, Optional<Properties> deploymentProperties) throws ArtifactDescriptorCreateException { final M artifactModel = createArtifactModel(artifactFolder); return createArtifact(artifactFolder, deploymentProperties, artifactModel); }
/** * Loads a descriptor from an artifact model * * @param artifactLocation folder where the artifact is located, it can be a folder or file depending on the artifact type. * @param artifactModel model representing the artifact. * @return a descriptor matching the provided model. */ protected final T loadFromJsonDescriptor(File artifactLocation, M artifactModel, Optional<Properties> deploymentProperties) { artifactModel.validateModel(artifactLocation.getName()); final T descriptor = createArtifactDescriptor(artifactLocation, artifactModel.getName(), deploymentProperties); if (artifactLocation.isDirectory()) { descriptor.setRootFolder(artifactLocation); } BundleDescriptor bundleDescriptor = getBundleDescriptor(artifactLocation, artifactModel); descriptor.setBundleDescriptor(bundleDescriptor); descriptor.setMinMuleVersion(new MuleVersion(artifactModel.getMinMuleVersion())); descriptor.setRequiredProduct(artifactModel.getRequiredProduct()); ClassLoaderModel classLoaderModel = getClassLoaderModel(artifactLocation, deploymentProperties, artifactModel.getClassLoaderModelLoaderDescriptor(), bundleDescriptor); descriptor.setClassLoaderModel(classLoaderModel); doDescriptorConfig(artifactModel, descriptor, artifactLocation); artifactDescriptorValidator.validate(descriptor); return descriptor; }
private ClassLoaderModel getClassLoaderModel(File artifactFolder, MuleArtifactLoaderDescriptor classLoaderModelLoaderDescriptor) { ClassLoaderModelLoader classLoaderModelLoader; try { classLoaderModelLoader = descriptorLoaderRepository.get(classLoaderModelLoaderDescriptor.getId(), getArtifactType(), ClassLoaderModelLoader.class); } catch (LoaderNotFoundException e) { throw new ArtifactDescriptorCreateException(invalidClassLoaderModelIdError(artifactFolder, classLoaderModelLoaderDescriptor)); } final ClassLoaderModel classLoaderModel; try { classLoaderModel = classLoaderModelLoader.load(artifactFolder, classLoaderModelLoaderDescriptor.getAttributes(), getArtifactType()); } catch (InvalidDescriptorLoaderException e) { throw new ArtifactDescriptorCreateException(e); } return classLoaderModel; }
private BundleDescriptor getBundleDescriptor(File appFolder, M artifactModel) { BundleDescriptorLoader bundleDescriptorLoader; try { bundleDescriptorLoader = descriptorLoaderRepository.get(artifactModel.getBundleDescriptorLoader().getId(), getArtifactType(), BundleDescriptorLoader.class); } catch (LoaderNotFoundException e) { throw new ArtifactDescriptorCreateException(invalidBundleDescriptorLoaderIdError(appFolder, artifactModel .getBundleDescriptorLoader())); } try { return bundleDescriptorLoader.load(appFolder, artifactModel.getBundleDescriptorLoader().getAttributes(), getArtifactType()); } catch (InvalidDescriptorLoaderException e) { throw new ArtifactDescriptorCreateException(e); } }
@Test public void detectsInvalidClassLoaderModelLoaderId() throws Exception { MulePolicyModelBuilder mulePolicyModelBuilder = new MulePolicyModelBuilder() .setName(POLICY_NAME) .setMinMuleVersion("4.0.0") .setRequiredProduct(MULE) .withBundleDescriptorLoader(createPolicyBundleDescriptorLoader(PROPERTIES_BUNDLE_DESCRIPTOR_LOADER_ID)) .withClassLoaderModelDescriptorLoader(new MuleArtifactLoaderDescriptor(INVALID_LOADER_ID, emptyMap())); PolicyFileBuilder policyFileBuilder = new PolicyFileBuilder(POLICY_NAME).describedBy(mulePolicyModelBuilder.build()); File tempFolder = createTempFolder(); unzip(policyFileBuilder.getArtifactFile(), tempFolder); PolicyTemplateDescriptorFactory descriptorFactory = new PolicyTemplateDescriptorFactory(artifactPluginDescriptorLoader, descriptorLoaderRepository, ArtifactDescriptorValidatorBuilder.builder()); expectedException.expect(ArtifactDescriptorCreateException.class); expectedException .expectMessage(invalidClassLoaderModelIdError(tempFolder, mulePolicyModelBuilder.getClassLoaderModelDescriptorLoader())); descriptorFactory.create(tempFolder, empty()); }
@Override protected Map<String, Object> getClassLoaderModelAttributes(Optional<Properties> deploymentPropertiesOptional, MuleArtifactLoaderDescriptor classLoaderModelLoaderDescriptor, BundleDescriptor bundleDescriptor) { Map<String, Object> attributes = super.getClassLoaderModelAttributes(deploymentPropertiesOptional, classLoaderModelLoaderDescriptor, bundleDescriptor); if (deploymentPropertiesOptional.isPresent()) { Properties deploymentProperties = deploymentPropertiesOptional.get(); if (deploymentProperties instanceof PluginExtendedDeploymentProperties) { PluginExtendedDeploymentProperties pluginExtendedDeploymentProperties = (PluginExtendedDeploymentProperties) deploymentProperties; return new PluginExtendedClassLoaderModelAttributes(attributes, pluginExtendedDeploymentProperties.getDeployableArtifactDescriptor()); } } return attributes; }
/** * Generates an artifact model from a given JSON descriptor * * @param jsonString artifact descriptor in JSON format * @return the artifact model matching the provided JSON content. */ protected M loadModelFromJson(String jsonString) { try { return deserializeArtifactModel(jsonString); } catch (IOException e) { throw new IllegalArgumentException("Cannot deserialize artifact descriptor from: " + jsonString); } }
/** * Loads a descriptor from an artifact model * * @param artifactLocation folder where the artifact is located, it can be a folder or file depending on the artifact type. * @param artifactModel model representing the artifact. * @return a descriptor matching the provided model. */ protected final T loadFromJsonDescriptor(File artifactLocation, M artifactModel, Optional<Properties> deploymentProperties) { artifactModel.validateModel(artifactLocation.getName()); BundleDescriptor bundleDescriptor = getBundleDescriptor(artifactLocation, artifactModel); final T descriptor = createArtifactDescriptor(artifactLocation, artifactModel.getName(), deploymentProperties); if (artifactLocation.isDirectory()) { descriptor.setRootFolder(artifactLocation); } descriptor.setBundleDescriptor(bundleDescriptor); descriptor.setMinMuleVersion(new MuleVersion(artifactModel.getMinMuleVersion())); descriptor.setRequiredProduct(artifactModel.getRequiredProduct()); ClassLoaderModel classLoaderModel = getClassLoaderModel(artifactLocation, artifactModel.getClassLoaderModelLoaderDescriptor()); descriptor.setClassLoaderModel(classLoaderModel); doDescriptorConfig(artifactModel, descriptor, artifactLocation); artifactDescriptorValidator.validate(descriptor); return descriptor; }
private BundleDescriptor getBundleDescriptor(File appFolder, M artifactModel) { BundleDescriptorLoader bundleDescriptorLoader; try { bundleDescriptorLoader = descriptorLoaderRepository.get(artifactModel.getBundleDescriptorLoader().getId(), getArtifactType(), BundleDescriptorLoader.class); } catch (LoaderNotFoundException e) { throw new ArtifactDescriptorCreateException(invalidBundleDescriptorLoaderIdError(appFolder, artifactModel .getBundleDescriptorLoader())); } try { return bundleDescriptorLoader.load(appFolder, artifactModel.getBundleDescriptorLoader().getAttributes(), getArtifactType()); } catch (InvalidDescriptorLoaderException e) { throw new ArtifactDescriptorCreateException(e); } }
@Test public void detectsInvalidClassLoaderModelLoaderId() throws Exception { MulePolicyModelBuilder mulePolicyModelBuilder = new MulePolicyModelBuilder() .setName(POLICY_NAME) .setMinMuleVersion("4.0.0") .setRequiredProduct(MULE) .withBundleDescriptorLoader(createPolicyBundleDescriptorLoader(PROPERTIES_BUNDLE_DESCRIPTOR_LOADER_ID)) .withClassLoaderModelDescriptorLoader(new MuleArtifactLoaderDescriptor(INVALID_LOADER_ID, emptyMap())); PolicyFileBuilder policyFileBuilder = new PolicyFileBuilder(POLICY_NAME).describedBy(mulePolicyModelBuilder.build()); File tempFolder = createTempFolder(); unzip(policyFileBuilder.getArtifactFile(), tempFolder); PolicyTemplateDescriptorFactory descriptorFactory = new PolicyTemplateDescriptorFactory(artifactPluginDescriptorLoader, descriptorLoaderRepository, ArtifactDescriptorValidatorBuilder.builder()); expectedException.expect(ArtifactDescriptorCreateException.class); expectedException .expectMessage(invalidClassLoaderModelIdError(tempFolder, mulePolicyModelBuilder.getClassLoaderModelDescriptorLoader())); descriptorFactory.create(tempFolder, empty()); }
/** * Generates an artifact model from a given JSON descriptor * * @param jsonString artifact descriptor in JSON format * @return the artifact model matching the provided JSON content. */ protected M loadModelFromJson(String jsonString) { try { return deserializeArtifactModel(jsonString); } catch (IOException e) { throw new IllegalArgumentException("Cannot deserialize artifact descriptor from: " + jsonString); } }
@Override public T create(File artifactFolder, Optional<Properties> deploymentProperties) throws ArtifactDescriptorCreateException { final M artifactModel = createArtifactModel(artifactFolder); return createArtifact(artifactFolder, deploymentProperties, artifactModel); }
@Override public ServiceDescriptor create(File artifactFolder, Optional<Properties> properties) throws ArtifactDescriptorCreateException { if (!artifactFolder.exists()) { throw new IllegalArgumentException("Service folder does not exists: " + artifactFolder.getAbsolutePath()); } return super.create(artifactFolder, properties); }