Re: javascript executescript processor
Thanks Matt! worked a treat. Mike On 7 March 2016 at 17:42, Matt Burgesswrote: > Looks like there are a few more differences between Sun Rhino (Java 7) and > Nashorn (Java 8) than I thought. For your importClass statements above, > those shouldn't be in quotes. Also I couldn't get the one-method interface > override to work even though the doc says it should, so I used an anonymous > class with 'process' mapped to the function. > > I will update the post or add a new one soon; in the meantime, here's a > Java 7 version of the script I got working: > > importClass(org.apache.commons.io.IOUtils) > importClass(java.nio.charset.StandardCharsets) > importClass(org.apache.nifi.processor.io.StreamCallback) > > var flowFile = session.get(); > if (flowFile != null) { > > flowFile = session.write(flowFile, > new StreamCallback() {process : function(inputStream, > outputStream) { > var text = IOUtils.toString(inputStream, > StandardCharsets.UTF_8) >var obj = JSON.parse(text) > var newObj = { > "Range": 5, > "Rating": obj.rating.primary.value, > "SecondaryRatings": {} >} >for(var key in obj.rating){ > var attrName = key; > var attrValue = obj.rating[key]; > if(attrName != "primary") { > newObj.SecondaryRatings[attrName] = {"id": attrName, "Range": 5, > "Value": attrValue.value}; > } > } > outputStream.write(new java.lang.String(JSON.stringify(newObj, null, > '\t')).getBytes(StandardCharsets.UTF_8)) > }}) > flowFile = session.putAttribute(flowFile, "filename", > flowFile.getAttribute('filename').split('.')[0]+'_translated.json') > session.transfer(flowFile, REL_SUCCESS) > } > > Regards, > Matt > > On Mon, Mar 7, 2016 at 12:05 PM, Mike Harding > wrote: > >> Just wondering as importClass fails if I do the following. >> >> importClass("org.apache.nifi.processor.io.StreamCallback"); >> importClass("org.apache.commons.io.IOUtils"); >> importClass("java.nio.charset.StandardCharsets"); >> >> >> Apologies for all the questions - I've never tried to include Java >> classes in a script before. >> >> >> >> On 7 March 2016 at 17:03, Mike Harding wrote: >> >>> aaa ok cool. Given that org.apache.nifi.processor.io.StreamCallback is >>> an interface do I need to include the underlying classes? >>> >>> On 7 March 2016 at 16:29, Matt Burgess wrote: >>> Looks like on Rhino you need a different syntax to import stuff: http://docs.oracle.com/javase/7/docs/technotes/guides/scripting/programmer_guide/#jsengine On Mon, Mar 7, 2016 at 11:26 AM, Matt Burgess wrote: > So that's weird since you're running NiFi on Java already and trying > to use JavaScript. What version of Java are you using? I wonder if the > Java.type() thing is new in Java 8's Nashorn. > > Sent from my iPhone > > On Mar 7, 2016, at 11:22 AM, Mike Harding > wrote: > > Hi Matt, > > Thanks for doing this - I've just tried to run the template and I get > the reference error: "Java" is not defined. I have JAVA_HOME set on my > ubuntu machine - just wondering if theres a new config setting I'm missing > perhaps? > > Mike > > On 2 March 2016 at 21:40, Matt Burgess wrote: > >> Ask and ye shall receive ;) I realize most of my examples are in >> Groovy so it was a good idea to do some non-trivial stuff in another >> language, thanks for the suggestion! >> >> I recreated the JSON-to-JSON template but with Javascript as the >> language: >> http://funnifi.blogspot.com/2016/03/executescript-json-to-json-revisited.html >> >> Regards, >> Matt >> >> On Wed, Mar 2, 2016 at 10:52 AM, Mike Harding > > wrote: >> >>> Hi Matt, >>> >>> Do you know if there is documentation that describes the >>> ExecuteScript JavaScript API at the moment ? Just as a practical example >>> how would I translate the Groovy code sample you walk through in this >>> post >>> > >>> http://funnifi.blogspot.co.uk/2016/02/executescript-json-to-json-conversion.html >>> >>> Thanks, >>> M >>> >>> >>> >>> >>> >>> On 1 March 2016 at 18:32, Mike Harding >>> wrote: >>> Hi Matt, That's exactly what I'm looking for - much appreciated ! Thanks, Mike On Tue, 1 Mar 2016 at 18:13, Matt Burgess wrote: > Mike, > > I have a blog containing a few posts on how to use ExecuteScript > and InvokeScriptedProcessor: http://funnifi.blogspot.com > > One contains an example using Javascript to get data from > Hazelcast and update flowfile
Re: javascript executescript processor
Looks like there are a few more differences between Sun Rhino (Java 7) and Nashorn (Java 8) than I thought. For your importClass statements above, those shouldn't be in quotes. Also I couldn't get the one-method interface override to work even though the doc says it should, so I used an anonymous class with 'process' mapped to the function. I will update the post or add a new one soon; in the meantime, here's a Java 7 version of the script I got working: importClass(org.apache.commons.io.IOUtils) importClass(java.nio.charset.StandardCharsets) importClass(org.apache.nifi.processor.io.StreamCallback) var flowFile = session.get(); if (flowFile != null) { flowFile = session.write(flowFile, new StreamCallback() {process : function(inputStream, outputStream) { var text = IOUtils.toString(inputStream, StandardCharsets.UTF_8) var obj = JSON.parse(text) var newObj = { "Range": 5, "Rating": obj.rating.primary.value, "SecondaryRatings": {} } for(var key in obj.rating){ var attrName = key; var attrValue = obj.rating[key]; if(attrName != "primary") { newObj.SecondaryRatings[attrName] = {"id": attrName, "Range": 5, "Value": attrValue.value}; } } outputStream.write(new java.lang.String(JSON.stringify(newObj, null, '\t')).getBytes(StandardCharsets.UTF_8)) }}) flowFile = session.putAttribute(flowFile, "filename", flowFile.getAttribute('filename').split('.')[0]+'_translated.json') session.transfer(flowFile, REL_SUCCESS) } Regards, Matt On Mon, Mar 7, 2016 at 12:05 PM, Mike Hardingwrote: > Just wondering as importClass fails if I do the following. > > importClass("org.apache.nifi.processor.io.StreamCallback"); > importClass("org.apache.commons.io.IOUtils"); > importClass("java.nio.charset.StandardCharsets"); > > > Apologies for all the questions - I've never tried to include Java classes > in a script before. > > > > On 7 March 2016 at 17:03, Mike Harding wrote: > >> aaa ok cool. Given that org.apache.nifi.processor.io.StreamCallback is >> an interface do I need to include the underlying classes? >> >> On 7 March 2016 at 16:29, Matt Burgess wrote: >> >>> Looks like on Rhino you need a different syntax to import stuff: >>> http://docs.oracle.com/javase/7/docs/technotes/guides/scripting/programmer_guide/#jsengine >>> >>> On Mon, Mar 7, 2016 at 11:26 AM, Matt Burgess >>> wrote: >>> So that's weird since you're running NiFi on Java already and trying to use JavaScript. What version of Java are you using? I wonder if the Java.type() thing is new in Java 8's Nashorn. Sent from my iPhone On Mar 7, 2016, at 11:22 AM, Mike Harding wrote: Hi Matt, Thanks for doing this - I've just tried to run the template and I get the reference error: "Java" is not defined. I have JAVA_HOME set on my ubuntu machine - just wondering if theres a new config setting I'm missing perhaps? Mike On 2 March 2016 at 21:40, Matt Burgess wrote: > Ask and ye shall receive ;) I realize most of my examples are in > Groovy so it was a good idea to do some non-trivial stuff in another > language, thanks for the suggestion! > > I recreated the JSON-to-JSON template but with Javascript as the > language: > http://funnifi.blogspot.com/2016/03/executescript-json-to-json-revisited.html > > Regards, > Matt > > On Wed, Mar 2, 2016 at 10:52 AM, Mike Harding > wrote: > >> Hi Matt, >> >> Do you know if there is documentation that describes the >> ExecuteScript JavaScript API at the moment ? Just as a practical example >> how would I translate the Groovy code sample you walk through in this >> post >> > >> http://funnifi.blogspot.co.uk/2016/02/executescript-json-to-json-conversion.html >> >> Thanks, >> M >> >> >> >> >> >> On 1 March 2016 at 18:32, Mike Harding >> wrote: >> >>> Hi Matt, >>> >>> That's exactly what I'm looking for - much appreciated ! >>> >>> Thanks, >>> Mike >>> >>> On Tue, 1 Mar 2016 at 18:13, Matt Burgess >>> wrote: >>> Mike, I have a blog containing a few posts on how to use ExecuteScript and InvokeScriptedProcessor: http://funnifi.blogspot.com One contains an example using Javascript to get data from Hazelcast and update flowfile attributes: http://funnifi.blogspot.com/2016/02/executescript-using-modules.html If you'd like to share what you'd like to do with ExecuteScript, I'd be happy to help you get going! Regards, Matt On Tue, Mar 1,
Re: javascript executescript processor
Just wondering as importClass fails if I do the following. importClass("org.apache.nifi.processor.io.StreamCallback"); importClass("org.apache.commons.io.IOUtils"); importClass("java.nio.charset.StandardCharsets"); Apologies for all the questions - I've never tried to include Java classes in a script before. On 7 March 2016 at 17:03, Mike Hardingwrote: > aaa ok cool. Given that org.apache.nifi.processor.io.StreamCallback is an > interface do I need to include the underlying classes? > > On 7 March 2016 at 16:29, Matt Burgess wrote: > >> Looks like on Rhino you need a different syntax to import stuff: >> http://docs.oracle.com/javase/7/docs/technotes/guides/scripting/programmer_guide/#jsengine >> >> On Mon, Mar 7, 2016 at 11:26 AM, Matt Burgess >> wrote: >> >>> So that's weird since you're running NiFi on Java already and trying to >>> use JavaScript. What version of Java are you using? I wonder if the >>> Java.type() thing is new in Java 8's Nashorn. >>> >>> Sent from my iPhone >>> >>> On Mar 7, 2016, at 11:22 AM, Mike Harding >>> wrote: >>> >>> Hi Matt, >>> >>> Thanks for doing this - I've just tried to run the template and I get >>> the reference error: "Java" is not defined. I have JAVA_HOME set on my >>> ubuntu machine - just wondering if theres a new config setting I'm missing >>> perhaps? >>> >>> Mike >>> >>> On 2 March 2016 at 21:40, Matt Burgess wrote: >>> Ask and ye shall receive ;) I realize most of my examples are in Groovy so it was a good idea to do some non-trivial stuff in another language, thanks for the suggestion! I recreated the JSON-to-JSON template but with Javascript as the language: http://funnifi.blogspot.com/2016/03/executescript-json-to-json-revisited.html Regards, Matt On Wed, Mar 2, 2016 at 10:52 AM, Mike Harding wrote: > Hi Matt, > > Do you know if there is documentation that describes the ExecuteScript > JavaScript API at the moment ? Just as a practical example how would I > translate the Groovy code sample you walk through in this post > > http://funnifi.blogspot.co.uk/2016/02/executescript-json-to-json-conversion.html > > Thanks, > M > > > > > > On 1 March 2016 at 18:32, Mike Harding wrote: > >> Hi Matt, >> >> That's exactly what I'm looking for - much appreciated ! >> >> Thanks, >> Mike >> >> On Tue, 1 Mar 2016 at 18:13, Matt Burgess >> wrote: >> >>> Mike, >>> >>> I have a blog containing a few posts on how to use ExecuteScript and >>> InvokeScriptedProcessor: http://funnifi.blogspot.com >>> >>> One contains an example using Javascript to get data from Hazelcast >>> and update flowfile attributes: >>> http://funnifi.blogspot.com/2016/02/executescript-using-modules.html >>> >>> If you'd like to share what you'd like to do with ExecuteScript, I'd >>> be happy to help you get going! >>> >>> Regards, >>> Matt >>> >>> On Tue, Mar 1, 2016 at 11:53 AM, Mike Harding < >>> mikeyhard...@gmail.com> wrote: >>> Hi, I'd like to utilise the ExecuteScript processor but I understand that its experimental. Can anyone point me in the direction of an example or tutorial preferably using Javascript on how to get started with it? Thanks, Mike >>> >>> > >>> >> >
Re: javascript executescript processor
aaa ok cool. Given that org.apache.nifi.processor.io.StreamCallback is an interface do I need to include the underlying classes? On 7 March 2016 at 16:29, Matt Burgesswrote: > Looks like on Rhino you need a different syntax to import stuff: > http://docs.oracle.com/javase/7/docs/technotes/guides/scripting/programmer_guide/#jsengine > > On Mon, Mar 7, 2016 at 11:26 AM, Matt Burgess wrote: > >> So that's weird since you're running NiFi on Java already and trying to >> use JavaScript. What version of Java are you using? I wonder if the >> Java.type() thing is new in Java 8's Nashorn. >> >> Sent from my iPhone >> >> On Mar 7, 2016, at 11:22 AM, Mike Harding wrote: >> >> Hi Matt, >> >> Thanks for doing this - I've just tried to run the template and I get the >> reference error: "Java" is not defined. I have JAVA_HOME set on my ubuntu >> machine - just wondering if theres a new config setting I'm missing perhaps? >> >> Mike >> >> On 2 March 2016 at 21:40, Matt Burgess wrote: >> >>> Ask and ye shall receive ;) I realize most of my examples are in Groovy >>> so it was a good idea to do some non-trivial stuff in another language, >>> thanks for the suggestion! >>> >>> I recreated the JSON-to-JSON template but with Javascript as the >>> language: >>> http://funnifi.blogspot.com/2016/03/executescript-json-to-json-revisited.html >>> >>> Regards, >>> Matt >>> >>> On Wed, Mar 2, 2016 at 10:52 AM, Mike Harding >>> wrote: >>> Hi Matt, Do you know if there is documentation that describes the ExecuteScript JavaScript API at the moment ? Just as a practical example how would I translate the Groovy code sample you walk through in this post > http://funnifi.blogspot.co.uk/2016/02/executescript-json-to-json-conversion.html Thanks, M On 1 March 2016 at 18:32, Mike Harding wrote: > Hi Matt, > > That's exactly what I'm looking for - much appreciated ! > > Thanks, > Mike > > On Tue, 1 Mar 2016 at 18:13, Matt Burgess wrote: > >> Mike, >> >> I have a blog containing a few posts on how to use ExecuteScript and >> InvokeScriptedProcessor: http://funnifi.blogspot.com >> >> One contains an example using Javascript to get data from Hazelcast >> and update flowfile attributes: >> http://funnifi.blogspot.com/2016/02/executescript-using-modules.html >> >> If you'd like to share what you'd like to do with ExecuteScript, I'd >> be happy to help you get going! >> >> Regards, >> Matt >> >> On Tue, Mar 1, 2016 at 11:53 AM, Mike Harding > > wrote: >> >>> Hi, >>> >>> I'd like to utilise the ExecuteScript processor but I understand >>> that its experimental. Can anyone point me in the direction of an >>> example >>> or tutorial preferably using Javascript on how to get started with it? >>> >>> Thanks, >>> Mike >>> >> >> >>> >> >
Re: javascript executescript processor
Good idea! In the scripting processor NAR there are language-specific handlers that (among other things) import helpful packages and classes. If such a util class was included, the processors could leverage them to make the script even easier to implement. Regards, Matt > On Mar 2, 2016, at 9:59 PM, Sumanth Chinthaguntawrote: > > Thanks for Great blog Matt. > Thinking we should provide an util class like this, to reduce verbose code > for scripting users. > https://github.com/xmlking/nifi-scripting/blob/master/nifi-sumo-common/src/main/java/com/crossbusiness/nifi/processors/NiFiUtils.java > > Sent from my iPhone > >> On Mar 2, 2016, at 1:40 PM, Matt Burgess wrote: >> >> Ask and ye shall receive ;) I realize most of my examples are in Groovy so >> it was a good idea to do some non-trivial stuff in another language, thanks >> for the suggestion! >> >> I recreated the JSON-to-JSON template but with Javascript as the language: >> http://funnifi.blogspot.com/2016/03/executescript-json-to-json-revisited.html >> >> Regards, >> Matt >> >>> On Wed, Mar 2, 2016 at 10:52 AM, Mike Harding >>> wrote: >>> Hi Matt, >>> >>> Do you know if there is documentation that describes the ExecuteScript >>> JavaScript API at the moment ? Just as a practical example how would I >>> translate the Groovy code sample you walk through in this post > >>> http://funnifi.blogspot.co.uk/2016/02/executescript-json-to-json-conversion.html >>> >>> Thanks, >>> M >>> >>> >>> >>> >>> On 1 March 2016 at 18:32, Mike Harding wrote: Hi Matt, That's exactly what I'm looking for - much appreciated ! Thanks, Mike > On Tue, 1 Mar 2016 at 18:13, Matt Burgess wrote: > Mike, > > I have a blog containing a few posts on how to use ExecuteScript and > InvokeScriptedProcessor: http://funnifi.blogspot.com > > One contains an example using Javascript to get data from Hazelcast and > update flowfile attributes: > http://funnifi.blogspot.com/2016/02/executescript-using-modules.html > > If you'd like to share what you'd like to do with ExecuteScript, I'd be > happy to help you get going! > > Regards, > Matt > >> On Tue, Mar 1, 2016 at 11:53 AM, Mike Harding >> wrote: >> Hi, >> >> I'd like to utilise the ExecuteScript processor but I understand that >> its experimental. Can anyone point me in the direction of an example or >> tutorial preferably using Javascript on how to get started with it? >> >> Thanks, >> Mike >>
Re: javascript executescript processor
Ask and ye shall receive ;) I realize most of my examples are in Groovy so it was a good idea to do some non-trivial stuff in another language, thanks for the suggestion! I recreated the JSON-to-JSON template but with Javascript as the language: http://funnifi.blogspot.com/2016/03/executescript-json-to-json-revisited.html Regards, Matt On Wed, Mar 2, 2016 at 10:52 AM, Mike Hardingwrote: > Hi Matt, > > Do you know if there is documentation that describes the ExecuteScript > JavaScript API at the moment ? Just as a practical example how would I > translate the Groovy code sample you walk through in this post > > http://funnifi.blogspot.co.uk/2016/02/executescript-json-to-json-conversion.html > > Thanks, > M > > > > > > On 1 March 2016 at 18:32, Mike Harding wrote: > >> Hi Matt, >> >> That's exactly what I'm looking for - much appreciated ! >> >> Thanks, >> Mike >> >> On Tue, 1 Mar 2016 at 18:13, Matt Burgess wrote: >> >>> Mike, >>> >>> I have a blog containing a few posts on how to use ExecuteScript and >>> InvokeScriptedProcessor: http://funnifi.blogspot.com >>> >>> One contains an example using Javascript to get data from Hazelcast and >>> update flowfile attributes: >>> http://funnifi.blogspot.com/2016/02/executescript-using-modules.html >>> >>> If you'd like to share what you'd like to do with ExecuteScript, I'd be >>> happy to help you get going! >>> >>> Regards, >>> Matt >>> >>> On Tue, Mar 1, 2016 at 11:53 AM, Mike Harding >>> wrote: >>> Hi, I'd like to utilise the ExecuteScript processor but I understand that its experimental. Can anyone point me in the direction of an example or tutorial preferably using Javascript on how to get started with it? Thanks, Mike >>> >>> >
Re: javascript executescript processor
Hi Matt, Do you know if there is documentation that describes the ExecuteScript JavaScript API at the moment ? Just as a practical example how would I translate the Groovy code sample you walk through in this post > http://funnifi.blogspot.co.uk/2016/02/executescript-json-to-json-conversion.html Thanks, M On 1 March 2016 at 18:32, Mike Hardingwrote: > Hi Matt, > > That's exactly what I'm looking for - much appreciated ! > > Thanks, > Mike > > On Tue, 1 Mar 2016 at 18:13, Matt Burgess wrote: > >> Mike, >> >> I have a blog containing a few posts on how to use ExecuteScript and >> InvokeScriptedProcessor: http://funnifi.blogspot.com >> >> One contains an example using Javascript to get data from Hazelcast and >> update flowfile attributes: >> http://funnifi.blogspot.com/2016/02/executescript-using-modules.html >> >> If you'd like to share what you'd like to do with ExecuteScript, I'd be >> happy to help you get going! >> >> Regards, >> Matt >> >> On Tue, Mar 1, 2016 at 11:53 AM, Mike Harding >> wrote: >> >>> Hi, >>> >>> I'd like to utilise the ExecuteScript processor but I understand that >>> its experimental. Can anyone point me in the direction of an example or >>> tutorial preferably using Javascript on how to get started with it? >>> >>> Thanks, >>> Mike >>> >> >>
Re: javascript executescript processor
Hi Matt, That's exactly what I'm looking for - much appreciated ! Thanks, Mike On Tue, 1 Mar 2016 at 18:13, Matt Burgesswrote: > Mike, > > I have a blog containing a few posts on how to use ExecuteScript and > InvokeScriptedProcessor: http://funnifi.blogspot.com > > One contains an example using Javascript to get data from Hazelcast and > update flowfile attributes: > http://funnifi.blogspot.com/2016/02/executescript-using-modules.html > > If you'd like to share what you'd like to do with ExecuteScript, I'd be > happy to help you get going! > > Regards, > Matt > > On Tue, Mar 1, 2016 at 11:53 AM, Mike Harding > wrote: > >> Hi, >> >> I'd like to utilise the ExecuteScript processor but I understand that its >> experimental. Can anyone point me in the direction of an example or >> tutorial preferably using Javascript on how to get started with it? >> >> Thanks, >> Mike >> > >
javascript executescript processor
Hi, I'd like to utilise the ExecuteScript processor but I understand that its experimental. Can anyone point me in the direction of an example or tutorial preferably using Javascript on how to get started with it? Thanks, Mike