Bob Whitehurst created NIFI-4527:
------------------------------------

             Summary: unable to get dynamicallyModifiesClasspath for 
PropertyDescriptor to work
                 Key: NIFI-4527
                 URL: https://issues.apache.org/jira/browse/NIFI-4527
             Project: Apache NiFi
          Issue Type: Bug
    Affects Versions: 1.3.0
            Reporter: Bob Whitehurst
            Priority: Minor


For some reason I cannot get a property that sets dynamicallyModifiesClasspath 
to true to work correctly. I read through the code that was dropped for 
NIFI-2909. Seems like it should work but perhaps I have missed something. Seems 
like someone should have encountered an issue before me. There are several 
other alternative solutions that I can use but it would be nice for this to 
work.

I created a test case with the following code that is called from the OnTrigger 
method. There may be a typo in this as I cannot cut/paste from my development 
environment: I created my own classloader which will correctly load the file.

======================================================
// resource property descriptor
private static final String EDH_FILE = "edh.yaml";
private static final String PROP_NAME = "resource_path";
private static final PropertyDescriptor RESOURCE_DIR = new 
PropertyDescritor.Builder()
    .name(PROP_NAME)
    .defaultValue("some-path")
    .description(" ... ")
    .required(true)
    .addValidator(StandardValidators.NON_EMPT_VALIDATOR)
    .dynamicallyModifiesClasspath(true)
    .build();

private void loadConfig(final ProcessContext context) {
    final InputStream is = this.getClass.getResourceAsStream(EDH_FILE);
    if (null == is) {
        logger.error("default classloader failed");
    }

    final PropertyValue prop = context.getProperty(PROP_NAME);
    String path = prop.getValue();
    try {
        final URL url = new URL("file://" + EDH_FILE);
        final Classloader clThread = 
Thread.currentThread.getContextClassLoader();
        final Classloader cl = URLClassLoader.newInstance(new URL[] {url}, 
clThread);
        InputStream ins = cl.getResourceAsStream(EDH_FILE);
        if (null == ins) {
            logger.error("failed to load from custom classloader");
        } else {
            logger.info("success");
            // read input stream
        }
    } catch (IOException ioe) {
        logger.error("ioe reading config", ioe);
    }
}

@Override
public void onTrigger(ProcessContext context, ProcessSession session) {
    loadConfig(conetxt);
    //... rest of code
}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to