mirror of https://github.com/apache/nifi.git
NIFI-993 added expression language support to GetHTTP for the filename and URL properties
Signed-off-by: Mark Payne <markap14@hotmail.com>
This commit is contained in:
parent
a031fb3dc6
commit
d887d8fdf0
|
@ -80,6 +80,7 @@ import org.apache.nifi.annotation.lifecycle.OnStopped;
|
||||||
import org.apache.nifi.components.PropertyDescriptor;
|
import org.apache.nifi.components.PropertyDescriptor;
|
||||||
import org.apache.nifi.components.ValidationContext;
|
import org.apache.nifi.components.ValidationContext;
|
||||||
import org.apache.nifi.components.ValidationResult;
|
import org.apache.nifi.components.ValidationResult;
|
||||||
|
import org.apache.nifi.expression.AttributeExpression;
|
||||||
import org.apache.nifi.flowfile.FlowFile;
|
import org.apache.nifi.flowfile.FlowFile;
|
||||||
import org.apache.nifi.flowfile.attributes.CoreAttributes;
|
import org.apache.nifi.flowfile.attributes.CoreAttributes;
|
||||||
import org.apache.nifi.logging.ProcessorLog;
|
import org.apache.nifi.logging.ProcessorLog;
|
||||||
|
@ -117,6 +118,7 @@ public class GetHTTP extends AbstractSessionFactoryProcessor {
|
||||||
.name("URL")
|
.name("URL")
|
||||||
.description("The URL to pull from")
|
.description("The URL to pull from")
|
||||||
.required(true)
|
.required(true)
|
||||||
|
.expressionLanguageSupported(true)
|
||||||
.addValidator(StandardValidators.URL_VALIDATOR)
|
.addValidator(StandardValidators.URL_VALIDATOR)
|
||||||
.addValidator(StandardValidators.createRegexMatchingValidator(Pattern.compile("https?\\://.*")))
|
.addValidator(StandardValidators.createRegexMatchingValidator(Pattern.compile("https?\\://.*")))
|
||||||
.build();
|
.build();
|
||||||
|
@ -149,7 +151,8 @@ public class GetHTTP extends AbstractSessionFactoryProcessor {
|
||||||
public static final PropertyDescriptor FILENAME = new PropertyDescriptor.Builder()
|
public static final PropertyDescriptor FILENAME = new PropertyDescriptor.Builder()
|
||||||
.name("Filename")
|
.name("Filename")
|
||||||
.description("The filename to assign to the file when pulled")
|
.description("The filename to assign to the file when pulled")
|
||||||
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
|
.expressionLanguageSupported(true)
|
||||||
|
.addValidator(StandardValidators.createAttributeExpressionLanguageValidator(AttributeExpression.ResultType.STRING))
|
||||||
.required(true)
|
.required(true)
|
||||||
.build();
|
.build();
|
||||||
public static final PropertyDescriptor USERNAME = new PropertyDescriptor.Builder()
|
public static final PropertyDescriptor USERNAME = new PropertyDescriptor.Builder()
|
||||||
|
@ -296,7 +299,7 @@ public class GetHTTP extends AbstractSessionFactoryProcessor {
|
||||||
protected Collection<ValidationResult> customValidate(final ValidationContext context) {
|
protected Collection<ValidationResult> customValidate(final ValidationContext context) {
|
||||||
final Collection<ValidationResult> results = new ArrayList<>();
|
final Collection<ValidationResult> results = new ArrayList<>();
|
||||||
|
|
||||||
if (context.getProperty(URL).getValue().startsWith("https") && context.getProperty(SSL_CONTEXT_SERVICE).getValue() == null) {
|
if (context.getProperty(URL).evaluateAttributeExpressions().getValue().startsWith("https") && context.getProperty(SSL_CONTEXT_SERVICE).getValue() == null) {
|
||||||
results.add(new ValidationResult.Builder()
|
results.add(new ValidationResult.Builder()
|
||||||
.explanation("URL is set to HTTPS protocol but no SSLContext has been specified")
|
.explanation("URL is set to HTTPS protocol but no SSLContext has been specified")
|
||||||
.valid(false)
|
.valid(false)
|
||||||
|
@ -344,7 +347,7 @@ public class GetHTTP extends AbstractSessionFactoryProcessor {
|
||||||
}
|
}
|
||||||
|
|
||||||
// get the URL
|
// get the URL
|
||||||
final String url = context.getProperty(URL).getValue();
|
final String url = context.getProperty(URL).evaluateAttributeExpressions().getValue();
|
||||||
final URI uri;
|
final URI uri;
|
||||||
String source = url;
|
String source = url;
|
||||||
try {
|
try {
|
||||||
|
@ -462,7 +465,7 @@ public class GetHTTP extends AbstractSessionFactoryProcessor {
|
||||||
}
|
}
|
||||||
|
|
||||||
FlowFile flowFile = session.create();
|
FlowFile flowFile = session.create();
|
||||||
flowFile = session.putAttribute(flowFile, CoreAttributes.FILENAME.key(), context.getProperty(FILENAME).getValue());
|
flowFile = session.putAttribute(flowFile, CoreAttributes.FILENAME.key(), context.getProperty(FILENAME).evaluateAttributeExpressions().getValue());
|
||||||
flowFile = session.putAttribute(flowFile, this.getClass().getSimpleName().toLowerCase() + ".remote.source", source);
|
flowFile = session.putAttribute(flowFile, this.getClass().getSimpleName().toLowerCase() + ".remote.source", source);
|
||||||
flowFile = session.importFrom(response.getEntity().getContent(), flowFile);
|
flowFile = session.importFrom(response.getEntity().getContent(), flowFile);
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@ import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import org.apache.nifi.flowfile.attributes.CoreAttributes;
|
||||||
import org.apache.nifi.processor.ProcessorInitializationContext;
|
import org.apache.nifi.processor.ProcessorInitializationContext;
|
||||||
import org.apache.nifi.reporting.InitializationException;
|
import org.apache.nifi.reporting.InitializationException;
|
||||||
import org.apache.nifi.ssl.SSLContextService;
|
import org.apache.nifi.ssl.SSLContextService;
|
||||||
|
@ -280,6 +281,42 @@ public class TestGetHTTP {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void testExpressionLanguage() throws Exception {
|
||||||
|
// set up web service
|
||||||
|
ServletHandler handler = new ServletHandler();
|
||||||
|
handler.addServletWithMapping(UserAgentTestingServlet.class, "/*");
|
||||||
|
|
||||||
|
// create the service
|
||||||
|
TestServer server = new TestServer();
|
||||||
|
server.addHandler(handler);
|
||||||
|
|
||||||
|
try {
|
||||||
|
server.startServer();
|
||||||
|
|
||||||
|
String destination = server.getUrl();
|
||||||
|
|
||||||
|
// set up NiFi mock controller
|
||||||
|
controller = TestRunners.newTestRunner(GetHTTP.class);
|
||||||
|
controller.setProperty(GetHTTP.CONNECTION_TIMEOUT, "5 secs");
|
||||||
|
controller.setProperty(GetHTTP.URL, destination+"/test_${literal(1)}.pdf");
|
||||||
|
controller.setProperty(GetHTTP.FILENAME, "test_${now():format('yyyy/MM/dd_HH:mm:ss')}");
|
||||||
|
controller.setProperty(GetHTTP.ACCEPT_CONTENT_TYPE, "application/json");
|
||||||
|
controller.setProperty(GetHTTP.USER_AGENT, "testUserAgent");
|
||||||
|
|
||||||
|
controller.run();
|
||||||
|
controller.assertTransferCount(GetHTTP.REL_SUCCESS, 1);
|
||||||
|
|
||||||
|
MockFlowFile response = controller.getFlowFilesForRelationship(GetHTTP.REL_SUCCESS).get(0);
|
||||||
|
response.assertAttributeEquals("gethttp.remote.source","localhost");
|
||||||
|
String fileName = response.getAttribute(CoreAttributes.FILENAME.key());
|
||||||
|
assertTrue(fileName.matches("test_\\d\\d\\d\\d/\\d\\d/\\d\\d_\\d\\d:\\d\\d:\\d\\d"));
|
||||||
|
// shutdown web service
|
||||||
|
} finally {
|
||||||
|
server.shutdownServer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private Map<String, String> getSslProperties() {
|
private Map<String, String> getSslProperties() {
|
||||||
Map<String, String> props = new HashMap<String, String>();
|
Map<String, String> props = new HashMap<String, String>();
|
||||||
props.put(StandardSSLContextService.KEYSTORE.getName(), "src/test/resources/localhost-ks.jks");
|
props.put(StandardSSLContextService.KEYSTORE.getName(), "src/test/resources/localhost-ks.jks");
|
||||||
|
|
Loading…
Reference in New Issue