[jira] [Commented] (NIFI-4995) Release Apache NiFi 1.6.0
[ https://issues.apache.org/jira/browse/NIFI-4995?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16429171#comment-16429171 ] Joseph Witt commented on NIFI-4995: --- Note to self: Continue on the release guide step 10 where we make sure that [https://archive.apache.org/dist/nifi/1.6.0/nifi-1.6.0-bin.tar.gz] Has been mirrored and then we cause the docker thing to happen by tagging the release. All prior steps have been finished. > Release Apache NiFi 1.6.0 > - > > Key: NIFI-4995 > URL: https://issues.apache.org/jira/browse/NIFI-4995 > Project: Apache NiFi > Issue Type: Task > Components: Tools and Build >Affects Versions: 1.6.0 >Reporter: Joseph Witt >Assignee: Joseph Witt >Priority: Blocker > Fix For: 1.6.0 > > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (NIFI-4995) Release Apache NiFi 1.6.0
[ https://issues.apache.org/jira/browse/NIFI-4995?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16429168#comment-16429168 ] ASF subversion and git services commented on NIFI-4995: --- Commit 1828578 from [~joewitt] in branch 'site/trunk' [ https://svn.apache.org/r1828578 ] NIFI-4995 > Release Apache NiFi 1.6.0 > - > > Key: NIFI-4995 > URL: https://issues.apache.org/jira/browse/NIFI-4995 > Project: Apache NiFi > Issue Type: Task > Components: Tools and Build >Affects Versions: 1.6.0 >Reporter: Joseph Witt >Assignee: Joseph Witt >Priority: Blocker > Fix For: 1.6.0 > > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (NIFI-4995) Release Apache NiFi 1.6.0
[ https://issues.apache.org/jira/browse/NIFI-4995?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16429159#comment-16429159 ] ASF subversion and git services commented on NIFI-4995: --- Commit 59f625d3c28cde1cbceff6cf1fafa09e07a8ff84 in nifi's branch refs/heads/master from [~joewitt] [ https://git-wip-us.apache.org/repos/asf?p=nifi.git;h=59f625d ] Merge branch 'NIFI-4995-RC3' as part of NiFi 1.6.0 release process > Release Apache NiFi 1.6.0 > - > > Key: NIFI-4995 > URL: https://issues.apache.org/jira/browse/NIFI-4995 > Project: Apache NiFi > Issue Type: Task > Components: Tools and Build >Affects Versions: 1.6.0 >Reporter: Joseph Witt >Assignee: Joseph Witt >Priority: Blocker > Fix For: 1.6.0 > > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (NIFI-4995) Release Apache NiFi 1.6.0
[ https://issues.apache.org/jira/browse/NIFI-4995?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16429158#comment-16429158 ] ASF subversion and git services commented on NIFI-4995: --- Commit d511fe3e4bbfccf7f3afb1636dbdcb19e9e15fa1 in nifi's branch refs/heads/master from [~joewitt] [ https://git-wip-us.apache.org/repos/asf?p=nifi.git;h=d511fe3 ] NIFI-4995-RC3 prepare for next development iteration > Release Apache NiFi 1.6.0 > - > > Key: NIFI-4995 > URL: https://issues.apache.org/jira/browse/NIFI-4995 > Project: Apache NiFi > Issue Type: Task > Components: Tools and Build >Affects Versions: 1.6.0 >Reporter: Joseph Witt >Assignee: Joseph Witt >Priority: Blocker > Fix For: 1.6.0 > > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (NIFI-4995) Release Apache NiFi 1.6.0
[ https://issues.apache.org/jira/browse/NIFI-4995?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16429160#comment-16429160 ] ASF subversion and git services commented on NIFI-4995: --- Commit 50137531195752f53698444308598870b3116186 in nifi's branch refs/heads/master from [~joewitt] [ https://git-wip-us.apache.org/repos/asf?p=nifi.git;h=5013753 ] NIFI-4995 update docker image and text info for next release > Release Apache NiFi 1.6.0 > - > > Key: NIFI-4995 > URL: https://issues.apache.org/jira/browse/NIFI-4995 > Project: Apache NiFi > Issue Type: Task > Components: Tools and Build >Affects Versions: 1.6.0 >Reporter: Joseph Witt >Assignee: Joseph Witt >Priority: Blocker > Fix For: 1.6.0 > > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (NIFI-4995) Release Apache NiFi 1.6.0
[ https://issues.apache.org/jira/browse/NIFI-4995?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16429155#comment-16429155 ] ASF subversion and git services commented on NIFI-4995: --- Commit 1828577 from [~joewitt] in branch 'site/trunk' [ https://svn.apache.org/r1828577 ] NIFI-4995 new download links > Release Apache NiFi 1.6.0 > - > > Key: NIFI-4995 > URL: https://issues.apache.org/jira/browse/NIFI-4995 > Project: Apache NiFi > Issue Type: Task > Components: Tools and Build >Affects Versions: 1.6.0 >Reporter: Joseph Witt >Assignee: Joseph Witt >Priority: Blocker > Fix For: 1.6.0 > > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[GitHub] nifi issue #2614: Added Apache Pulsar Processors and Controller Service
Github user david-streamlio commented on the issue: https://github.com/apache/nifi/pull/2614 One single squashed commit, with both NIFI-4908 & NIFI-4914 changes in it. ---
[jira] [Commented] (NIFI-4908) Add Consumer and Producer Processors for Apache Pulsar
[ https://issues.apache.org/jira/browse/NIFI-4908?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16429101#comment-16429101 ] ASF GitHub Bot commented on NIFI-4908: -- Github user david-streamlio commented on the issue: https://github.com/apache/nifi/pull/2614 One single squashed commit, with both NIFI-4908 & NIFI-4914 changes in it. > Add Consumer and Producer Processors for Apache Pulsar > -- > > Key: NIFI-4908 > URL: https://issues.apache.org/jira/browse/NIFI-4908 > Project: Apache NiFi > Issue Type: New Feature > Components: Extensions >Affects Versions: 1.5.0 >Reporter: David Kjerrumgaard >Priority: Minor > Labels: newbie > Fix For: 1.5.0 > > Original Estimate: 168h > Remaining Estimate: 168h > > Please add processors that allow NiFi to publish messages to Apache Pulsar > topics and subscribe to Apache Pulsar topics -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[GitHub] nifi pull request #2614: Added Apache Pulsar Processors and Controller Servi...
GitHub user david-streamlio opened a pull request: https://github.com/apache/nifi/pull/2614 Added Apache Pulsar Processors and Controller Service Thank you for submitting a contribution to Apache NiFi. In order to streamline the review of the contribution we ask you to ensure the following steps have been taken: ### For all changes: - [ ] Is there a JIRA ticket associated with this PR? Is it referenced in the commit message? - [ ] Does your PR title start with NIFI- where is the JIRA number you are trying to resolve? Pay particular attention to the hyphen "-" character. - [ ] Has your PR been rebased against the latest commit within the target branch (typically master)? - [ ] Is your initial contribution a single, squashed commit? ### For code changes: - [ ] Have you ensured that the full suite of tests is executed via mvn -Pcontrib-check clean install at the root nifi folder? - [ ] Have you written or updated unit tests to verify your changes? - [ ] If adding new dependencies to the code, are these dependencies licensed in a way that is compatible for inclusion under [ASF 2.0](http://www.apache.org/legal/resolved.html#category-a)? - [ ] If applicable, have you updated the LICENSE file, including the main LICENSE file under nifi-assembly? - [ ] If applicable, have you updated the NOTICE file, including the main NOTICE file found under nifi-assembly? - [ ] If adding new Properties, have you added .displayName in addition to .name (programmatic access) for each of the new properties? ### For documentation related changes: - [ ] Have you ensured that format looks appropriate for the output in which it is rendered? ### Note: Please ensure that once the PR is submitted, you check travis-ci for build issues and submit an update to your PR as soon as possible. You can merge this pull request into a Git repository by running: $ git pull https://github.com/david-streamlio/nifi NIFI-4914 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/nifi/pull/2614.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #2614 commit bcfdae70506e4b1f2aab03a8bcfc9f55f859597c Author: David KjerrumgaardDate: 2018-04-06T22:42:30Z Added Apache Pulsar Processors and Controller Service ---
[GitHub] nifi pull request #2554: Nifi 4914 rebase
Github user david-streamlio closed the pull request at: https://github.com/apache/nifi/pull/2554 ---
[jira] [Resolved] (NIFI-5050) Add powerpc and ARM support in frontend-maven-plugin
[ https://issues.apache.org/jira/browse/NIFI-5050?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Scott Aslan resolved NIFI-5050. --- Resolution: Fixed Fix Version/s: 1.7.0 > Add powerpc and ARM support in frontend-maven-plugin > > > Key: NIFI-5050 > URL: https://issues.apache.org/jira/browse/NIFI-5050 > Project: Apache NiFi > Issue Type: Bug > Components: Core UI >Affects Versions: 1.5.0 >Reporter: Vi On >Priority: Major > Fix For: 1.7.0 > > > Frontend-maven-plugin 1.4 adds better support for PowerPC and ARM > architecture. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (NIFI-5050) Add powerpc and ARM support in frontend-maven-plugin
[ https://issues.apache.org/jira/browse/NIFI-5050?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428928#comment-16428928 ] ASF GitHub Bot commented on NIFI-5050: -- Github user scottyaslan commented on the issue: https://github.com/apache/nifi/pull/2613 Thanks @vion1 this has been merged to master. > Add powerpc and ARM support in frontend-maven-plugin > > > Key: NIFI-5050 > URL: https://issues.apache.org/jira/browse/NIFI-5050 > Project: Apache NiFi > Issue Type: Bug > Components: Core UI >Affects Versions: 1.5.0 >Reporter: Vi On >Priority: Major > > Frontend-maven-plugin 1.4 adds better support for PowerPC and ARM > architecture. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (NIFI-5050) Add powerpc and ARM support in frontend-maven-plugin
[ https://issues.apache.org/jira/browse/NIFI-5050?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428927#comment-16428927 ] ASF GitHub Bot commented on NIFI-5050: -- Github user asfgit closed the pull request at: https://github.com/apache/nifi/pull/2613 > Add powerpc and ARM support in frontend-maven-plugin > > > Key: NIFI-5050 > URL: https://issues.apache.org/jira/browse/NIFI-5050 > Project: Apache NiFi > Issue Type: Bug > Components: Core UI >Affects Versions: 1.5.0 >Reporter: Vi On >Priority: Major > > Frontend-maven-plugin 1.4 adds better support for PowerPC and ARM > architecture. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[GitHub] nifi pull request #2613: NIFI-5050 update frontend-maven-plugin
Github user asfgit closed the pull request at: https://github.com/apache/nifi/pull/2613 ---
[GitHub] nifi issue #2613: NIFI-5050 update frontend-maven-plugin
Github user scottyaslan commented on the issue: https://github.com/apache/nifi/pull/2613 Thanks @vion1 this has been merged to master. ---
[jira] [Commented] (NIFI-5050) Add powerpc and ARM support in frontend-maven-plugin
[ https://issues.apache.org/jira/browse/NIFI-5050?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428924#comment-16428924 ] ASF subversion and git services commented on NIFI-5050: --- Commit b414132324e945d1c6340f812efe5e6024fad2c1 in nifi's branch refs/heads/master from [~vilamon] [ https://git-wip-us.apache.org/repos/asf?p=nifi.git;h=b414132 ] NIFI-5050 update frontend-maven-plugin This closes #2613 Signed-off-by: Scott Aslan> Add powerpc and ARM support in frontend-maven-plugin > > > Key: NIFI-5050 > URL: https://issues.apache.org/jira/browse/NIFI-5050 > Project: Apache NiFi > Issue Type: Bug > Components: Core UI >Affects Versions: 1.5.0 >Reporter: Vi On >Priority: Major > > Frontend-maven-plugin 1.4 adds better support for PowerPC and ARM > architecture. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (NIFI-5050) Add powerpc and ARM support in frontend-maven-plugin
[ https://issues.apache.org/jira/browse/NIFI-5050?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428869#comment-16428869 ] ASF GitHub Bot commented on NIFI-5050: -- Github user scottyaslan commented on the issue: https://github.com/apache/nifi/pull/2613 Reviewing... > Add powerpc and ARM support in frontend-maven-plugin > > > Key: NIFI-5050 > URL: https://issues.apache.org/jira/browse/NIFI-5050 > Project: Apache NiFi > Issue Type: Bug > Components: Core UI >Affects Versions: 1.5.0 >Reporter: Vi On >Priority: Major > > Frontend-maven-plugin 1.4 adds better support for PowerPC and ARM > architecture. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[GitHub] nifi issue #2613: NIFI-5050 update frontend-maven-plugin
Github user scottyaslan commented on the issue: https://github.com/apache/nifi/pull/2613 Reviewing... ---
[jira] [Commented] (NIFIREG-161) Unable to select bucket and flow UUIDs in flow details panel
[ https://issues.apache.org/jira/browse/NIFIREG-161?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428861#comment-16428861 ] ASF GitHub Bot commented on NIFIREG-161: GitHub user scottyaslan opened a pull request: https://github.com/apache/nifi-registry/pull/109 [NIFIREG-161] selectable bucket and flow UUIDs in flow details panel You can merge this pull request into a Git repository by running: $ git pull https://github.com/scottyaslan/nifi-registry NIFIREG-161 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/nifi-registry/pull/109.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #109 commit c9781d311ec2cdf7121131091805e0bd029b5a04 Author: Scott AslanDate: 2018-04-06T19:56:01Z [NIFIREG-161] selectable bucket and flow UUIDs in flow details panel > Unable to select bucket and flow UUIDs in flow details panel > > > Key: NIFIREG-161 > URL: https://issues.apache.org/jira/browse/NIFIREG-161 > Project: NiFi Registry > Issue Type: Bug >Affects Versions: 0.2.0 >Reporter: Bryan Bende >Assignee: Scott Aslan >Priority: Minor > Fix For: 0.2.0 > > > Using master it appears that you can no longer select the UUIDs for the flow > id and bucket id that were added to the flow details panel in the main grid. > This prevents easily copying/pasting the ids. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[GitHub] nifi-registry pull request #109: [NIFIREG-161] selectable bucket and flow UU...
GitHub user scottyaslan opened a pull request: https://github.com/apache/nifi-registry/pull/109 [NIFIREG-161] selectable bucket and flow UUIDs in flow details panel You can merge this pull request into a Git repository by running: $ git pull https://github.com/scottyaslan/nifi-registry NIFIREG-161 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/nifi-registry/pull/109.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #109 commit c9781d311ec2cdf7121131091805e0bd029b5a04 Author: Scott AslanDate: 2018-04-06T19:56:01Z [NIFIREG-161] selectable bucket and flow UUIDs in flow details panel ---
[jira] [Commented] (NIFI-5050) Add powerpc and ARM support in frontend-maven-plugin
[ https://issues.apache.org/jira/browse/NIFI-5050?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428856#comment-16428856 ] ASF GitHub Bot commented on NIFI-5050: -- GitHub user vion1 opened a pull request: https://github.com/apache/nifi/pull/2613 NIFI-5050 update frontend-maven-plugin Thank you for submitting a contribution to Apache NiFi. In order to streamline the review of the contribution we ask you to ensure the following steps have been taken: ### For all changes: - [ ] Is there a JIRA ticket associated with this PR? Is it referenced in the commit message? - [ ] Does your PR title start with NIFI- where is the JIRA number you are trying to resolve? Pay particular attention to the hyphen "-" character. - [ ] Has your PR been rebased against the latest commit within the target branch (typically master)? - [ ] Is your initial contribution a single, squashed commit? ### For code changes: - [ ] Have you ensured that the full suite of tests is executed via mvn -Pcontrib-check clean install at the root nifi folder? - [ ] Have you written or updated unit tests to verify your changes? - [ ] If adding new dependencies to the code, are these dependencies licensed in a way that is compatible for inclusion under [ASF 2.0](http://www.apache.org/legal/resolved.html#category-a)? - [ ] If applicable, have you updated the LICENSE file, including the main LICENSE file under nifi-assembly? - [ ] If applicable, have you updated the NOTICE file, including the main NOTICE file found under nifi-assembly? - [ ] If adding new Properties, have you added .displayName in addition to .name (programmatic access) for each of the new properties? ### For documentation related changes: - [ ] Have you ensured that format looks appropriate for the output in which it is rendered? ### Note: Please ensure that once the PR is submitted, you check travis-ci for build issues and submit an update to your PR as soon as possible. You can merge this pull request into a Git repository by running: $ git pull https://github.com/vion1/nifi NIFI-5050 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/nifi/pull/2613.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #2613 commit 758b431bc54285ff7aedfd66f2d1bedb3c076071 Author: Vi OnDate: 2018-04-06T19:48:46Z NIFI-5050 update frontend-maven-plugin > Add powerpc and ARM support in frontend-maven-plugin > > > Key: NIFI-5050 > URL: https://issues.apache.org/jira/browse/NIFI-5050 > Project: Apache NiFi > Issue Type: Bug > Components: Core UI >Affects Versions: 1.5.0 >Reporter: Vi On >Priority: Major > > Frontend-maven-plugin 1.4 adds better support for PowerPC and ARM > architecture. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[GitHub] nifi pull request #2613: NIFI-5050 update frontend-maven-plugin
GitHub user vion1 opened a pull request: https://github.com/apache/nifi/pull/2613 NIFI-5050 update frontend-maven-plugin Thank you for submitting a contribution to Apache NiFi. In order to streamline the review of the contribution we ask you to ensure the following steps have been taken: ### For all changes: - [ ] Is there a JIRA ticket associated with this PR? Is it referenced in the commit message? - [ ] Does your PR title start with NIFI- where is the JIRA number you are trying to resolve? Pay particular attention to the hyphen "-" character. - [ ] Has your PR been rebased against the latest commit within the target branch (typically master)? - [ ] Is your initial contribution a single, squashed commit? ### For code changes: - [ ] Have you ensured that the full suite of tests is executed via mvn -Pcontrib-check clean install at the root nifi folder? - [ ] Have you written or updated unit tests to verify your changes? - [ ] If adding new dependencies to the code, are these dependencies licensed in a way that is compatible for inclusion under [ASF 2.0](http://www.apache.org/legal/resolved.html#category-a)? - [ ] If applicable, have you updated the LICENSE file, including the main LICENSE file under nifi-assembly? - [ ] If applicable, have you updated the NOTICE file, including the main NOTICE file found under nifi-assembly? - [ ] If adding new Properties, have you added .displayName in addition to .name (programmatic access) for each of the new properties? ### For documentation related changes: - [ ] Have you ensured that format looks appropriate for the output in which it is rendered? ### Note: Please ensure that once the PR is submitted, you check travis-ci for build issues and submit an update to your PR as soon as possible. You can merge this pull request into a Git repository by running: $ git pull https://github.com/vion1/nifi NIFI-5050 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/nifi/pull/2613.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #2613 commit 758b431bc54285ff7aedfd66f2d1bedb3c076071 Author: Vi OnDate: 2018-04-06T19:48:46Z NIFI-5050 update frontend-maven-plugin ---
[jira] [Commented] (NIFI-5048) Typo in description for KeytabCredentialsService controller service
[ https://issues.apache.org/jira/browse/NIFI-5048?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428849#comment-16428849 ] ASF GitHub Bot commented on NIFI-5048: -- Github user scottyaslan commented on the issue: https://github.com/apache/nifi/pull/2612 Thanks @andrewmlim this has been merged to master. > Typo in description for KeytabCredentialsService controller service > --- > > Key: NIFI-5048 > URL: https://issues.apache.org/jira/browse/NIFI-5048 > Project: Apache NiFi > Issue Type: Bug > Components: Extensions >Reporter: Andrew Lim >Assignee: Andrew Lim >Priority: Trivial > Fix For: 1.7.0 > > > KeytabCredentialsService controller service was added in NIFI-4917. > The description has a section: > an administrative is able to choose > Change this to: > an *administrator* is able to choose > > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[GitHub] nifi issue #2612: NIFI-5048 Corrected typo in KeytabCredentialsService contr...
Github user scottyaslan commented on the issue: https://github.com/apache/nifi/pull/2612 Thanks @andrewmlim this has been merged to master. ---
[jira] [Commented] (NIFI-5047) PutMongo checks for query key when mode is insert
[ https://issues.apache.org/jira/browse/NIFI-5047?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428836#comment-16428836 ] ASF GitHub Bot commented on NIFI-5047: -- Github user asfgit closed the pull request at: https://github.com/apache/nifi/pull/2609 > PutMongo checks for query key when mode is insert > - > > Key: NIFI-5047 > URL: https://issues.apache.org/jira/browse/NIFI-5047 > Project: Apache NiFi > Issue Type: Bug > Components: Extensions >Affects Versions: 1.6.0 >Reporter: Mike Thomsen >Assignee: Mike Thomsen >Priority: Major > Fix For: 1.7.0 > > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[GitHub] nifi issue #2609: NIFI-5047 Fixed a bug in PutMongo that prevented it from w...
Github user pvillard31 commented on the issue: https://github.com/apache/nifi/pull/2609 +1, merging to master, thanks @MikeThomsen ---
[jira] [Commented] (NIFI-5047) PutMongo checks for query key when mode is insert
[ https://issues.apache.org/jira/browse/NIFI-5047?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428835#comment-16428835 ] ASF subversion and git services commented on NIFI-5047: --- Commit 63d4bba5a41d4eed40fb3324f124ba02e196d28c in nifi's branch refs/heads/master from [~mike.thomsen] [ https://git-wip-us.apache.org/repos/asf?p=nifi.git;h=63d4bba ] NIFI-5047 Fixed a bug in PutMongo that prevented it from working if the mode is insert and the query/query key are not set. Signed-off-by: Pierre VillardThis closes #2609. > PutMongo checks for query key when mode is insert > - > > Key: NIFI-5047 > URL: https://issues.apache.org/jira/browse/NIFI-5047 > Project: Apache NiFi > Issue Type: Bug >Reporter: Mike Thomsen >Assignee: Mike Thomsen >Priority: Major > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Created] (NIFI-5050) Add powerpc and ARM support in frontend-maven-plugin
Vi On created NIFI-5050: --- Summary: Add powerpc and ARM support in frontend-maven-plugin Key: NIFI-5050 URL: https://issues.apache.org/jira/browse/NIFI-5050 Project: Apache NiFi Issue Type: Bug Components: Core UI Affects Versions: 1.5.0 Reporter: Vi On Frontend-maven-plugin 1.4 adds better support for PowerPC and ARM architecture. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Updated] (NIFI-5047) PutMongo checks for query key when mode is insert
[ https://issues.apache.org/jira/browse/NIFI-5047?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Pierre Villard updated NIFI-5047: - Affects Version/s: 1.6.0 > PutMongo checks for query key when mode is insert > - > > Key: NIFI-5047 > URL: https://issues.apache.org/jira/browse/NIFI-5047 > Project: Apache NiFi > Issue Type: Bug > Components: Extensions >Affects Versions: 1.6.0 >Reporter: Mike Thomsen >Assignee: Mike Thomsen >Priority: Major > Fix For: 1.7.0 > > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[GitHub] nifi pull request #2609: NIFI-5047 Fixed a bug in PutMongo that prevented it...
Github user asfgit closed the pull request at: https://github.com/apache/nifi/pull/2609 ---
[jira] [Updated] (NIFI-5047) PutMongo checks for query key when mode is insert
[ https://issues.apache.org/jira/browse/NIFI-5047?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Pierre Villard updated NIFI-5047: - Component/s: Extensions > PutMongo checks for query key when mode is insert > - > > Key: NIFI-5047 > URL: https://issues.apache.org/jira/browse/NIFI-5047 > Project: Apache NiFi > Issue Type: Bug > Components: Extensions >Affects Versions: 1.6.0 >Reporter: Mike Thomsen >Assignee: Mike Thomsen >Priority: Major > Fix For: 1.7.0 > > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Updated] (NIFI-5047) PutMongo checks for query key when mode is insert
[ https://issues.apache.org/jira/browse/NIFI-5047?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Pierre Villard updated NIFI-5047: - Resolution: Fixed Fix Version/s: 1.7.0 Status: Resolved (was: Patch Available) > PutMongo checks for query key when mode is insert > - > > Key: NIFI-5047 > URL: https://issues.apache.org/jira/browse/NIFI-5047 > Project: Apache NiFi > Issue Type: Bug > Components: Extensions >Affects Versions: 1.6.0 >Reporter: Mike Thomsen >Assignee: Mike Thomsen >Priority: Major > Fix For: 1.7.0 > > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (NIFI-5047) PutMongo checks for query key when mode is insert
[ https://issues.apache.org/jira/browse/NIFI-5047?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428834#comment-16428834 ] ASF GitHub Bot commented on NIFI-5047: -- Github user pvillard31 commented on the issue: https://github.com/apache/nifi/pull/2609 +1, merging to master, thanks @MikeThomsen > PutMongo checks for query key when mode is insert > - > > Key: NIFI-5047 > URL: https://issues.apache.org/jira/browse/NIFI-5047 > Project: Apache NiFi > Issue Type: Bug >Reporter: Mike Thomsen >Assignee: Mike Thomsen >Priority: Major > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Resolved] (NIFI-5048) Typo in description for KeytabCredentialsService controller service
[ https://issues.apache.org/jira/browse/NIFI-5048?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Andrew Lim resolved NIFI-5048. -- Resolution: Fixed Fix Version/s: 1.7.0 > Typo in description for KeytabCredentialsService controller service > --- > > Key: NIFI-5048 > URL: https://issues.apache.org/jira/browse/NIFI-5048 > Project: Apache NiFi > Issue Type: Bug > Components: Extensions >Reporter: Andrew Lim >Assignee: Andrew Lim >Priority: Trivial > Fix For: 1.7.0 > > > KeytabCredentialsService controller service was added in NIFI-4917. > The description has a section: > an administrative is able to choose > Change this to: > an *administrator* is able to choose > > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (NIFI-5048) Typo in description for KeytabCredentialsService controller service
[ https://issues.apache.org/jira/browse/NIFI-5048?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428815#comment-16428815 ] ASF GitHub Bot commented on NIFI-5048: -- Github user asfgit closed the pull request at: https://github.com/apache/nifi/pull/2612 > Typo in description for KeytabCredentialsService controller service > --- > > Key: NIFI-5048 > URL: https://issues.apache.org/jira/browse/NIFI-5048 > Project: Apache NiFi > Issue Type: Bug > Components: Extensions >Reporter: Andrew Lim >Assignee: Andrew Lim >Priority: Trivial > > KeytabCredentialsService controller service was added in NIFI-4917. > The description has a section: > an administrative is able to choose > Change this to: > an *administrator* is able to choose > > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[GitHub] nifi pull request #2612: NIFI-5048 Corrected typo in KeytabCredentialsServic...
Github user asfgit closed the pull request at: https://github.com/apache/nifi/pull/2612 ---
[jira] [Commented] (NIFI-5048) Typo in description for KeytabCredentialsService controller service
[ https://issues.apache.org/jira/browse/NIFI-5048?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428814#comment-16428814 ] ASF subversion and git services commented on NIFI-5048: --- Commit 8e10f0bd5430e9cbf19851db52a697c0fd76e77b in nifi's branch refs/heads/master from [~andrewmlim] [ https://git-wip-us.apache.org/repos/asf?p=nifi.git;h=8e10f0b ] NIFI-5048 Corrected typo in KeytabCredentialsService controller service description This closes #2612 Signed-off-by: Scott Aslan> Typo in description for KeytabCredentialsService controller service > --- > > Key: NIFI-5048 > URL: https://issues.apache.org/jira/browse/NIFI-5048 > Project: Apache NiFi > Issue Type: Bug > Components: Extensions >Reporter: Andrew Lim >Assignee: Andrew Lim >Priority: Trivial > > KeytabCredentialsService controller service was added in NIFI-4917. > The description has a section: > an administrative is able to choose > Change this to: > an *administrator* is able to choose > > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (NIFI-5049) Fixhandling of Phonenix datetime columns in QueryDatabaseTable and GenerateTableFetch
[ https://issues.apache.org/jira/browse/NIFI-5049?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428789#comment-16428789 ] Gardella Juan Pablo commented on NIFI-5049: --- I will work on a patch > Fixhandling of Phonenix datetime columns in QueryDatabaseTable and > GenerateTableFetch > - > > Key: NIFI-5049 > URL: https://issues.apache.org/jira/browse/NIFI-5049 > Project: Apache NiFi > Issue Type: Bug > Components: Core Framework >Affects Versions: 1.5.0 >Reporter: Gardella Juan Pablo >Assignee: Matt Burgess >Priority: Major > Original Estimate: 24h > Remaining Estimate: 24h > > QueryDatabaseAdapter does not work against Phoenix DB if it should convert > TIMESTAMP. The error is described below: > [https://stackoverflow.com/questions/45989678/convert-varchar-to-timestamp-in-hbase] > Basically, it's required to use TO_TIMESTAMP(MAX_COLUMN) to make it work. > See > [https://lists.apache.org/thread.html/%3cca+kifscje8ay+uxt_d_vst4qgzf4jxwovboynjgztt4dsbs...@mail.gmail.com%3E] -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Updated] (NIFI-5049) Fixhandling of Phonenix datetime columns in QueryDatabaseTable and GenerateTableFetch
[ https://issues.apache.org/jira/browse/NIFI-5049?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Gardella Juan Pablo updated NIFI-5049: -- Affects Version/s: (was: 0.6.0) 1.5.0 Remaining Estimate: 24h Original Estimate: 24h Fix Version/s: (was: 1.2.0) Description: QueryDatabaseAdapter does not work against Phoenix DB if it should convert TIMESTAMP. The error is described below: [https://stackoverflow.com/questions/45989678/convert-varchar-to-timestamp-in-hbase] Basically, it's required to use TO_TIMESTAMP(MAX_COLUMN) to make it work. See [https://lists.apache.org/thread.html/%3cca+kifscje8ay+uxt_d_vst4qgzf4jxwovboynjgztt4dsbs...@mail.gmail.com%3E] was: Due to default handling of Oracle columns returned as java.sql.Date types, the string literals used to compare against the column values must be in the same format as the NLS_DATE_FORMAT setting of the database (often -MM-DD). I believe when "Oracle" is provided as the database type (formerly known as pre-processing strategy), Oracle's Datetime Functions (such as TO_DATE or TO_TIMESTAMP) could be leveraged to give more fine-grained maximum-value information. Component/s: Core Framework Issue Type: Bug (was: Improvement) > Fixhandling of Phonenix datetime columns in QueryDatabaseTable and > GenerateTableFetch > - > > Key: NIFI-5049 > URL: https://issues.apache.org/jira/browse/NIFI-5049 > Project: Apache NiFi > Issue Type: Bug > Components: Core Framework >Affects Versions: 1.5.0 >Reporter: Gardella Juan Pablo >Assignee: Matt Burgess >Priority: Major > Original Estimate: 24h > Remaining Estimate: 24h > > QueryDatabaseAdapter does not work against Phoenix DB if it should convert > TIMESTAMP. The error is described below: > [https://stackoverflow.com/questions/45989678/convert-varchar-to-timestamp-in-hbase] > Basically, it's required to use TO_TIMESTAMP(MAX_COLUMN) to make it work. > See > [https://lists.apache.org/thread.html/%3cca+kifscje8ay+uxt_d_vst4qgzf4jxwovboynjgztt4dsbs...@mail.gmail.com%3E] -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Created] (NIFI-5049) Fixhandling of Phonenix datetime columns in QueryDatabaseTable and GenerateTableFetch
Gardella Juan Pablo created NIFI-5049: - Summary: Fixhandling of Phonenix datetime columns in QueryDatabaseTable and GenerateTableFetch Key: NIFI-5049 URL: https://issues.apache.org/jira/browse/NIFI-5049 Project: Apache NiFi Issue Type: Improvement Affects Versions: 0.6.0 Reporter: Gardella Juan Pablo Assignee: Matt Burgess Fix For: 1.2.0 Due to default handling of Oracle columns returned as java.sql.Date types, the string literals used to compare against the column values must be in the same format as the NLS_DATE_FORMAT setting of the database (often -MM-DD). I believe when "Oracle" is provided as the database type (formerly known as pre-processing strategy), Oracle's Datetime Functions (such as TO_DATE or TO_TIMESTAMP) could be leveraged to give more fine-grained maximum-value information. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Closed] (NIFIREG-159) Cannot copy/paste bucket/flow IDs from the UI
[ https://issues.apache.org/jira/browse/NIFIREG-159?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Pierre Villard closed NIFIREG-159. -- Resolution: Duplicate Closing this one in favor of NIFIREG-161 > Cannot copy/paste bucket/flow IDs from the UI > - > > Key: NIFIREG-159 > URL: https://issues.apache.org/jira/browse/NIFIREG-159 > Project: NiFi Registry > Issue Type: Improvement >Affects Versions: 0.2.0 >Reporter: Pierre Villard >Priority: Major > Attachments: Screen Shot 2018-03-27 at 1.36.57 PM.png > > > When looking at the versions list of a particular bucket/workflow, the bucket > ID and the workflow ID have been added in the UI with NIFIREG-125 (see > attached screenshot). However you cannot select the IDs and copy/paste it. > Could be nice to either have a button to copy the information or to let the > user the possibility to select the IDs. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (NIFI-4149) Indicate if EL is evaluated against FFs or not
[ https://issues.apache.org/jira/browse/NIFI-4149?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428756#comment-16428756 ] ASF subversion and git services commented on NIFI-4149: --- Commit 7cc77937d8636feb65d708d14c3b22a6c71a1ed7 in nifi's branch refs/heads/master from [~pvillard] [ https://git-wip-us.apache.org/repos/asf?p=nifi.git;h=7cc7793 ] NIFI-4149 - fixed contrib-check errors > Indicate if EL is evaluated against FFs or not > -- > > Key: NIFI-4149 > URL: https://issues.apache.org/jira/browse/NIFI-4149 > Project: Apache NiFi > Issue Type: Improvement > Components: Core Framework >Reporter: Pierre Villard >Assignee: Pierre Villard >Priority: Major > Fix For: 1.7.0 > > > With the addition of EL in a lot of places to improve SDLC and workflow > staging, it becomes important to indicate to users if the expression language > enabled on a property will be evaluated against the attributes of incoming > flow files or if it will only be evaluated against various variable stores > (env variables, variable registry, etc). > Actually, the expression language (without evaluation against flow files) > could be allowed on any property by default, and evaluation against flow > files would be what is actually indicated in the UI as we are doing today. > Adopting this approach could solve a lot of JIRA/PRs we are seeing to add EL > on some specific properties (without evaluation against FFs). > Having expression language to access external values could make sense on any > property for any user. However evaluating the expression language against FFs > is clearly a more complex challenge when it comes to session management and > such. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[GitHub] nifi pull request #2587: NIFI-4185 Add XML Record Reader
Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179833060 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag(); + +// root tag validation +if (rootName != null && !rootName.equals(rootTag.getName().toString())) { +final StringBuffer message = new StringBuffer(); +
[GitHub] nifi pull request #2587: NIFI-4185 Add XML Record Reader
Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179834908 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag(); + +// root tag validation +if (rootName != null && !rootName.equals(rootTag.getName().toString())) { +final StringBuffer message = new StringBuffer(); +
[jira] [Commented] (NIFI-4185) Add XML record reader & writer services
[ https://issues.apache.org/jira/browse/NIFI-4185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428741#comment-16428741 ] ASF GitHub Bot commented on NIFI-4185: -- Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179838657 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag();
[jira] [Commented] (NIFI-4185) Add XML record reader & writer services
[ https://issues.apache.org/jira/browse/NIFI-4185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428731#comment-16428731 ] ASF GitHub Bot commented on NIFI-4185: -- Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179831387 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag();
[GitHub] nifi pull request #2587: NIFI-4185 Add XML Record Reader
Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179834679 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag(); + +// root tag validation +if (rootName != null && !rootName.equals(rootTag.getName().toString())) { +final StringBuffer message = new StringBuffer(); +
[jira] [Commented] (NIFI-4185) Add XML record reader & writer services
[ https://issues.apache.org/jira/browse/NIFI-4185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428732#comment-16428732 ] ASF GitHub Bot commented on NIFI-4185: -- Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179830847 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag();
[jira] [Commented] (NIFI-4185) Add XML record reader & writer services
[ https://issues.apache.org/jira/browse/NIFI-4185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428726#comment-16428726 ] ASF GitHub Bot commented on NIFI-4185: -- Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179819928 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLReader.java --- @@ -0,0 +1,133 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.annotation.documentation.CapabilityDescription; +import org.apache.nifi.annotation.documentation.Tags; +import org.apache.nifi.annotation.lifecycle.OnEnabled; +import org.apache.nifi.components.PropertyDescriptor; +import org.apache.nifi.controller.ConfigurationContext; +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.processor.util.StandardValidators; +import org.apache.nifi.schema.access.SchemaNotFoundException; +import org.apache.nifi.serialization.DateTimeUtils; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.RecordReaderFactory; +import org.apache.nifi.serialization.SchemaRegistryService; +import org.apache.nifi.serialization.record.RecordSchema; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Tags({"xml", "record", "reader", "parser"}) +@CapabilityDescription("Reads XML content and creates Record objects. Records are expected in the second level of " + +"XML data, embedded in an enclosing root tag.") +public class XMLReader extends SchemaRegistryService implements RecordReaderFactory { + +public static final PropertyDescriptor VALIDATE_ROOT_TAG = new PropertyDescriptor.Builder() +.name("validate_root_tag") +.displayName("Validate Root Tag") +.description("If this property is set, the name of root tags (e. g. ...) of incoming FlowFiles will be evaluated against this value. " + +"In the case of a mismatch, an exception is thrown. The treatment of such FlowFiles depends on the implementation " + +"of respective Processors.") +.addValidator(StandardValidators.NON_EMPTY_VALIDATOR) +.expressionLanguageSupported(true) +.required(false) +.build(); + +public static final PropertyDescriptor VALIDATE_RECORD_TAG = new PropertyDescriptor.Builder() --- End diff -- Likewise, I think we should remove this property and this sort of validation as well. If the user wants to validate some specific XML element names, the ValidateRecord processor is a great solution for that, and provides far more flexible validation via schema. > Add XML record reader & writer services > --- > > Key: NIFI-4185 > URL: https://issues.apache.org/jira/browse/NIFI-4185 > Project: Apache NiFi > Issue Type: New Feature > Components: Extensions >Affects Versions: 1.3.0 >Reporter: Andy LoPresto >Assignee: Johannes Peter >Priority: Major > Labels: json, records, xml > > With the addition of the {{RecordReader}} and {{RecordSetWriter}} paradigm, > XML conversion has not yet been targeted. This will replace the previous > ticket for XML to JSON conversion. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (NIFI-4185) Add XML record reader & writer services
[ https://issues.apache.org/jira/browse/NIFI-4185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428745#comment-16428745 ] ASF GitHub Bot commented on NIFI-4185: -- Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179834679 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag();
[jira] [Commented] (NIFI-4185) Add XML record reader & writer services
[ https://issues.apache.org/jira/browse/NIFI-4185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428735#comment-16428735 ] ASF GitHub Bot commented on NIFI-4185: -- Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179827839 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag();
[jira] [Commented] (NIFI-4185) Add XML record reader & writer services
[ https://issues.apache.org/jira/browse/NIFI-4185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428736#comment-16428736 ] ASF GitHub Bot commented on NIFI-4185: -- Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179820052 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLReader.java --- @@ -0,0 +1,133 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.annotation.documentation.CapabilityDescription; +import org.apache.nifi.annotation.documentation.Tags; +import org.apache.nifi.annotation.lifecycle.OnEnabled; +import org.apache.nifi.components.PropertyDescriptor; +import org.apache.nifi.controller.ConfigurationContext; +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.processor.util.StandardValidators; +import org.apache.nifi.schema.access.SchemaNotFoundException; +import org.apache.nifi.serialization.DateTimeUtils; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.RecordReaderFactory; +import org.apache.nifi.serialization.SchemaRegistryService; +import org.apache.nifi.serialization.record.RecordSchema; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Tags({"xml", "record", "reader", "parser"}) +@CapabilityDescription("Reads XML content and creates Record objects. Records are expected in the second level of " + +"XML data, embedded in an enclosing root tag.") +public class XMLReader extends SchemaRegistryService implements RecordReaderFactory { + +public static final PropertyDescriptor VALIDATE_ROOT_TAG = new PropertyDescriptor.Builder() +.name("validate_root_tag") +.displayName("Validate Root Tag") +.description("If this property is set, the name of root tags (e. g. ...) of incoming FlowFiles will be evaluated against this value. " + +"In the case of a mismatch, an exception is thrown. The treatment of such FlowFiles depends on the implementation " + +"of respective Processors.") +.addValidator(StandardValidators.NON_EMPTY_VALIDATOR) +.expressionLanguageSupported(true) +.required(false) +.build(); + +public static final PropertyDescriptor VALIDATE_RECORD_TAG = new PropertyDescriptor.Builder() +.name("validate_record_tag") +.displayName("Validate Record Tag") +.description("If this property is set, the name of record tags (e. g. ...) of incoming FlowFiles will be evaluated against this value. " + +"In the case of a mismatch, the respective record will be skipped. If this property is not set, each level 2 starting tag will be treated " + +"as the beginning of a record.") +.addValidator(StandardValidators.NON_EMPTY_VALIDATOR) +.expressionLanguageSupported(true) +.required(false) +.build(); + +public static final PropertyDescriptor ATTRIBUTE_PREFIX = new PropertyDescriptor.Builder() +.name("attribute_prefix") +.displayName("Attribute Prefix") +.description("If this property is set, the name of attributes will be appended by a prefix when they are added to a record.") --- End diff -- I think this is supposed to say "prepended with a prefix" > Add XML record reader & writer services > --- > > Key: NIFI-4185 > URL:
[jira] [Commented] (NIFI-4185) Add XML record reader & writer services
[ https://issues.apache.org/jira/browse/NIFI-4185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428730#comment-16428730 ] ASF GitHub Bot commented on NIFI-4185: -- Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179829486 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag();
[jira] [Commented] (NIFI-4185) Add XML record reader & writer services
[ https://issues.apache.org/jira/browse/NIFI-4185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428737#comment-16428737 ] ASF GitHub Bot commented on NIFI-4185: -- Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179833060 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag();
[jira] [Commented] (NIFI-4185) Add XML record reader & writer services
[ https://issues.apache.org/jira/browse/NIFI-4185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428729#comment-16428729 ] ASF GitHub Bot commented on NIFI-4185: -- Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179829341 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag();
[jira] [Commented] (NIFI-4185) Add XML record reader & writer services
[ https://issues.apache.org/jira/browse/NIFI-4185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428725#comment-16428725 ] ASF GitHub Bot commented on NIFI-4185: -- Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179820952 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLReader.java --- @@ -0,0 +1,133 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.annotation.documentation.CapabilityDescription; +import org.apache.nifi.annotation.documentation.Tags; +import org.apache.nifi.annotation.lifecycle.OnEnabled; +import org.apache.nifi.components.PropertyDescriptor; +import org.apache.nifi.controller.ConfigurationContext; +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.processor.util.StandardValidators; +import org.apache.nifi.schema.access.SchemaNotFoundException; +import org.apache.nifi.serialization.DateTimeUtils; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.RecordReaderFactory; +import org.apache.nifi.serialization.SchemaRegistryService; +import org.apache.nifi.serialization.record.RecordSchema; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Tags({"xml", "record", "reader", "parser"}) +@CapabilityDescription("Reads XML content and creates Record objects. Records are expected in the second level of " + --- End diff -- I think the requirement that XML data must be wrapped in some sort of wrapper is going to be problematic. While this will be a fairly common case, so that multiple XML elements can be combined into a single FlowFile, it is also going to be common (probably more common) that each XML element will be its own standalone Record. This is especially important if this Reader is used for something like ListenTCPRecord or ConsumeKafkaRecord, where the data is received from elsewhere so no processor has a chance to wrap the content prior to using the XML Reader. I think we need to support both ignoring the outer-most element as well as incorporating the outer-most element. > Add XML record reader & writer services > --- > > Key: NIFI-4185 > URL: https://issues.apache.org/jira/browse/NIFI-4185 > Project: Apache NiFi > Issue Type: New Feature > Components: Extensions >Affects Versions: 1.3.0 >Reporter: Andy LoPresto >Assignee: Johannes Peter >Priority: Major > Labels: json, records, xml > > With the addition of the {{RecordReader}} and {{RecordSetWriter}} paradigm, > XML conversion has not yet been targeted. This will replace the previous > ticket for XML to JSON conversion. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (NIFI-4185) Add XML record reader & writer services
[ https://issues.apache.org/jira/browse/NIFI-4185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428733#comment-16428733 ] ASF GitHub Bot commented on NIFI-4185: -- Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179830412 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag();
[jira] [Commented] (NIFI-4185) Add XML record reader & writer services
[ https://issues.apache.org/jira/browse/NIFI-4185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428738#comment-16428738 ] ASF GitHub Bot commented on NIFI-4185: -- Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179833900 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag();
[jira] [Commented] (NIFI-4185) Add XML record reader & writer services
[ https://issues.apache.org/jira/browse/NIFI-4185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428742#comment-16428742 ] ASF GitHub Bot commented on NIFI-4185: -- Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179835305 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag();
[jira] [Commented] (NIFI-4185) Add XML record reader & writer services
[ https://issues.apache.org/jira/browse/NIFI-4185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428740#comment-16428740 ] ASF GitHub Bot commented on NIFI-4185: -- Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179829981 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag();
[jira] [Commented] (NIFI-4185) Add XML record reader & writer services
[ https://issues.apache.org/jira/browse/NIFI-4185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428728#comment-16428728 ] ASF GitHub Bot commented on NIFI-4185: -- Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179827156 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag();
[jira] [Commented] (NIFI-4185) Add XML record reader & writer services
[ https://issues.apache.org/jira/browse/NIFI-4185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428727#comment-16428727 ] ASF GitHub Bot commented on NIFI-4185: -- Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179824910 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); --- End diff -- I think this approach may lead to some odd behaviors if the incoming XML is actually namespace aware. For example, if
[jira] [Commented] (NIFI-4185) Add XML record reader & writer services
[ https://issues.apache.org/jira/browse/NIFI-4185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428743#comment-16428743 ] ASF GitHub Bot commented on NIFI-4185: -- Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179834908 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag();
[jira] [Commented] (NIFI-4185) Add XML record reader & writer services
[ https://issues.apache.org/jira/browse/NIFI-4185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428734#comment-16428734 ] ASF GitHub Bot commented on NIFI-4185: -- Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179829864 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag();
[GitHub] nifi pull request #2587: NIFI-4185 Add XML Record Reader
Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179822292 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? --- End diff -- Record Readers don't need to be thread-safe, only the RecordReaderFactory does. ---
[jira] [Commented] (NIFI-4185) Add XML record reader & writer services
[ https://issues.apache.org/jira/browse/NIFI-4185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428739#comment-16428739 ] ASF GitHub Bot commented on NIFI-4185: -- Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179831931 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag();
[jira] [Commented] (NIFI-4185) Add XML record reader & writer services
[ https://issues.apache.org/jira/browse/NIFI-4185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428744#comment-16428744 ] ASF GitHub Bot commented on NIFI-4185: -- Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179840389 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLReader.java --- @@ -0,0 +1,133 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.annotation.documentation.CapabilityDescription; +import org.apache.nifi.annotation.documentation.Tags; +import org.apache.nifi.annotation.lifecycle.OnEnabled; +import org.apache.nifi.components.PropertyDescriptor; +import org.apache.nifi.controller.ConfigurationContext; +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.processor.util.StandardValidators; +import org.apache.nifi.schema.access.SchemaNotFoundException; +import org.apache.nifi.serialization.DateTimeUtils; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.RecordReaderFactory; +import org.apache.nifi.serialization.SchemaRegistryService; +import org.apache.nifi.serialization.record.RecordSchema; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Tags({"xml", "record", "reader", "parser"}) +@CapabilityDescription("Reads XML content and creates Record objects. Records are expected in the second level of " + --- End diff -- More specifically, I think that if the following were the content of a FlowFile: ``` John Doe 123 01/01/2017 ``` Then I would expect to have this parse as a single Record that would match this schema: ``` { "name": "person", "namespace": "nifi", "type": "record", "fields": [ { "name": "name", "type": "string" }, { "name": "id", "type": "int" }, { "name": "dob", "type": "date" } ] } ``` Additionally, I would expect to be able to set a property that indicates that the outer-most XML element is simply a wrapper. If that property were set to "true", then I would expect to use that exact same schema to parse the following XML: ``` John Doe 123 01/01/2017 Jane Doe 124 01/01/2016 Jake Doe 125 01/01/2015 ``` In this case, the 'people' element is just a wrapper and could just as easily be an element named 'root' or 'foo' or 'bar'. > Add XML record reader & writer services > --- > > Key: NIFI-4185 > URL: https://issues.apache.org/jira/browse/NIFI-4185 > Project: Apache NiFi > Issue Type: New Feature > Components: Extensions >Affects Versions: 1.3.0 >Reporter: Andy LoPresto >Assignee: Johannes Peter >Priority: Major > Labels: json, records, xml > > With the addition of the {{RecordReader}} and {{RecordSetWriter}} paradigm, > XML conversion has not yet been targeted. This will replace the previous > ticket for XML to JSON conversion. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (NIFI-4185) Add XML record reader & writer services
[ https://issues.apache.org/jira/browse/NIFI-4185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428724#comment-16428724 ] ASF GitHub Bot commented on NIFI-4185: -- Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179822292 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? --- End diff -- Record Readers don't need to be thread-safe, only the RecordReaderFactory does. > Add XML record reader & writer services > --- > > Key: NIFI-4185 > URL: https://issues.apache.org/jira/browse/NIFI-4185 > Project: Apache NiFi > Issue Type: New Feature > Components: Extensions >Affects Versions: 1.3.0 >Reporter: Andy LoPresto >Assignee: Johannes Peter >Priority: Major > Labels: json, records, xml > > With the addition of the {{RecordReader}} and {{RecordSetWriter}} paradigm, > XML conversion has not yet been targeted. This will replace the previous > ticket for XML to JSON conversion. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (NIFI-4185) Add XML record reader & writer services
[ https://issues.apache.org/jira/browse/NIFI-4185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428723#comment-16428723 ] ASF GitHub Bot commented on NIFI-4185: -- Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179819209 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLReader.java --- @@ -0,0 +1,133 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.annotation.documentation.CapabilityDescription; +import org.apache.nifi.annotation.documentation.Tags; +import org.apache.nifi.annotation.lifecycle.OnEnabled; +import org.apache.nifi.components.PropertyDescriptor; +import org.apache.nifi.controller.ConfigurationContext; +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.processor.util.StandardValidators; +import org.apache.nifi.schema.access.SchemaNotFoundException; +import org.apache.nifi.serialization.DateTimeUtils; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.RecordReaderFactory; +import org.apache.nifi.serialization.SchemaRegistryService; +import org.apache.nifi.serialization.record.RecordSchema; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Tags({"xml", "record", "reader", "parser"}) +@CapabilityDescription("Reads XML content and creates Record objects. Records are expected in the second level of " + +"XML data, embedded in an enclosing root tag.") +public class XMLReader extends SchemaRegistryService implements RecordReaderFactory { + +public static final PropertyDescriptor VALIDATE_ROOT_TAG = new PropertyDescriptor.Builder() --- End diff -- I am actually in favor of removing this property all together. In order to properly read the records, the Record Readers will need to validate syntax of the data, but I don't believe that it should be validating arbitrary semantic meanings. I.e., I don't think that we should be checking the name of the outer-most element for any specific name. > Add XML record reader & writer services > --- > > Key: NIFI-4185 > URL: https://issues.apache.org/jira/browse/NIFI-4185 > Project: Apache NiFi > Issue Type: New Feature > Components: Extensions >Affects Versions: 1.3.0 >Reporter: Andy LoPresto >Assignee: Johannes Peter >Priority: Major > Labels: json, records, xml > > With the addition of the {{RecordReader}} and {{RecordSetWriter}} paradigm, > XML conversion has not yet been targeted. This will replace the previous > ticket for XML to JSON conversion. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[GitHub] nifi pull request #2587: NIFI-4185 Add XML Record Reader
Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179827156 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag(); + +// root tag validation +if (rootName != null && !rootName.equals(rootTag.getName().toString())) { +final StringBuffer message = new StringBuffer(); +
[GitHub] nifi pull request #2587: NIFI-4185 Add XML Record Reader
Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179830412 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag(); + +// root tag validation +if (rootName != null && !rootName.equals(rootTag.getName().toString())) { +final StringBuffer message = new StringBuffer(); +
[GitHub] nifi pull request #2587: NIFI-4185 Add XML Record Reader
Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179831387 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag(); + +// root tag validation +if (rootName != null && !rootName.equals(rootTag.getName().toString())) { +final StringBuffer message = new StringBuffer(); +
[GitHub] nifi pull request #2587: NIFI-4185 Add XML Record Reader
Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179830847 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag(); + +// root tag validation +if (rootName != null && !rootName.equals(rootTag.getName().toString())) { +final StringBuffer message = new StringBuffer(); +
[GitHub] nifi pull request #2587: NIFI-4185 Add XML Record Reader
Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179833900 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag(); + +// root tag validation +if (rootName != null && !rootName.equals(rootTag.getName().toString())) { +final StringBuffer message = new StringBuffer(); +
[GitHub] nifi pull request #2587: NIFI-4185 Add XML Record Reader
Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179831931 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag(); + +// root tag validation +if (rootName != null && !rootName.equals(rootTag.getName().toString())) { +final StringBuffer message = new StringBuffer(); +
[GitHub] nifi pull request #2587: NIFI-4185 Add XML Record Reader
Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179835305 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag(); + +// root tag validation +if (rootName != null && !rootName.equals(rootTag.getName().toString())) { +final StringBuffer message = new StringBuffer(); +
[GitHub] nifi pull request #2587: NIFI-4185 Add XML Record Reader
Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179824910 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); --- End diff -- I think this approach may lead to some odd behaviors if the incoming XML is actually namespace aware. For example, if an element looks like: ``` ``` Then the name of the element in the schema would have to be "ns:myElement" in order to match. But I think that's not what we want. Instead, in the schema, I would want to use the name
[GitHub] nifi pull request #2587: NIFI-4185 Add XML Record Reader
Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179820952 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLReader.java --- @@ -0,0 +1,133 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.annotation.documentation.CapabilityDescription; +import org.apache.nifi.annotation.documentation.Tags; +import org.apache.nifi.annotation.lifecycle.OnEnabled; +import org.apache.nifi.components.PropertyDescriptor; +import org.apache.nifi.controller.ConfigurationContext; +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.processor.util.StandardValidators; +import org.apache.nifi.schema.access.SchemaNotFoundException; +import org.apache.nifi.serialization.DateTimeUtils; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.RecordReaderFactory; +import org.apache.nifi.serialization.SchemaRegistryService; +import org.apache.nifi.serialization.record.RecordSchema; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Tags({"xml", "record", "reader", "parser"}) +@CapabilityDescription("Reads XML content and creates Record objects. Records are expected in the second level of " + --- End diff -- I think the requirement that XML data must be wrapped in some sort of wrapper is going to be problematic. While this will be a fairly common case, so that multiple XML elements can be combined into a single FlowFile, it is also going to be common (probably more common) that each XML element will be its own standalone Record. This is especially important if this Reader is used for something like ListenTCPRecord or ConsumeKafkaRecord, where the data is received from elsewhere so no processor has a chance to wrap the content prior to using the XML Reader. I think we need to support both ignoring the outer-most element as well as incorporating the outer-most element. ---
[GitHub] nifi pull request #2587: NIFI-4185 Add XML Record Reader
Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179829864 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag(); + +// root tag validation +if (rootName != null && !rootName.equals(rootTag.getName().toString())) { +final StringBuffer message = new StringBuffer(); +
[GitHub] nifi pull request #2587: NIFI-4185 Add XML Record Reader
Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179827839 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag(); + +// root tag validation +if (rootName != null && !rootName.equals(rootTag.getName().toString())) { +final StringBuffer message = new StringBuffer(); +
[GitHub] nifi pull request #2587: NIFI-4185 Add XML Record Reader
Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179829981 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag(); + +// root tag validation +if (rootName != null && !rootName.equals(rootTag.getName().toString())) { +final StringBuffer message = new StringBuffer(); +
[GitHub] nifi pull request #2587: NIFI-4185 Add XML Record Reader
Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179840389 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLReader.java --- @@ -0,0 +1,133 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.annotation.documentation.CapabilityDescription; +import org.apache.nifi.annotation.documentation.Tags; +import org.apache.nifi.annotation.lifecycle.OnEnabled; +import org.apache.nifi.components.PropertyDescriptor; +import org.apache.nifi.controller.ConfigurationContext; +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.processor.util.StandardValidators; +import org.apache.nifi.schema.access.SchemaNotFoundException; +import org.apache.nifi.serialization.DateTimeUtils; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.RecordReaderFactory; +import org.apache.nifi.serialization.SchemaRegistryService; +import org.apache.nifi.serialization.record.RecordSchema; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Tags({"xml", "record", "reader", "parser"}) +@CapabilityDescription("Reads XML content and creates Record objects. Records are expected in the second level of " + --- End diff -- More specifically, I think that if the following were the content of a FlowFile: ``` John Doe 123 01/01/2017 ``` Then I would expect to have this parse as a single Record that would match this schema: ``` { "name": "person", "namespace": "nifi", "type": "record", "fields": [ { "name": "name", "type": "string" }, { "name": "id", "type": "int" }, { "name": "dob", "type": "date" } ] } ``` Additionally, I would expect to be able to set a property that indicates that the outer-most XML element is simply a wrapper. If that property were set to "true", then I would expect to use that exact same schema to parse the following XML: ``` John Doe 123 01/01/2017 Jane Doe 124 01/01/2016 Jake Doe 125 01/01/2015 ``` In this case, the 'people' element is just a wrapper and could just as easily be an element named 'root' or 'foo' or 'bar'. ---
[GitHub] nifi pull request #2587: NIFI-4185 Add XML Record Reader
Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179829341 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag(); + +// root tag validation +if (rootName != null && !rootName.equals(rootTag.getName().toString())) { +final StringBuffer message = new StringBuffer(); +
[GitHub] nifi pull request #2587: NIFI-4185 Add XML Record Reader
Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179820052 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLReader.java --- @@ -0,0 +1,133 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.annotation.documentation.CapabilityDescription; +import org.apache.nifi.annotation.documentation.Tags; +import org.apache.nifi.annotation.lifecycle.OnEnabled; +import org.apache.nifi.components.PropertyDescriptor; +import org.apache.nifi.controller.ConfigurationContext; +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.processor.util.StandardValidators; +import org.apache.nifi.schema.access.SchemaNotFoundException; +import org.apache.nifi.serialization.DateTimeUtils; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.RecordReaderFactory; +import org.apache.nifi.serialization.SchemaRegistryService; +import org.apache.nifi.serialization.record.RecordSchema; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Tags({"xml", "record", "reader", "parser"}) +@CapabilityDescription("Reads XML content and creates Record objects. Records are expected in the second level of " + +"XML data, embedded in an enclosing root tag.") +public class XMLReader extends SchemaRegistryService implements RecordReaderFactory { + +public static final PropertyDescriptor VALIDATE_ROOT_TAG = new PropertyDescriptor.Builder() +.name("validate_root_tag") +.displayName("Validate Root Tag") +.description("If this property is set, the name of root tags (e. g. ...) of incoming FlowFiles will be evaluated against this value. " + +"In the case of a mismatch, an exception is thrown. The treatment of such FlowFiles depends on the implementation " + +"of respective Processors.") +.addValidator(StandardValidators.NON_EMPTY_VALIDATOR) +.expressionLanguageSupported(true) +.required(false) +.build(); + +public static final PropertyDescriptor VALIDATE_RECORD_TAG = new PropertyDescriptor.Builder() +.name("validate_record_tag") +.displayName("Validate Record Tag") +.description("If this property is set, the name of record tags (e. g. ...) of incoming FlowFiles will be evaluated against this value. " + +"In the case of a mismatch, the respective record will be skipped. If this property is not set, each level 2 starting tag will be treated " + +"as the beginning of a record.") +.addValidator(StandardValidators.NON_EMPTY_VALIDATOR) +.expressionLanguageSupported(true) +.required(false) +.build(); + +public static final PropertyDescriptor ATTRIBUTE_PREFIX = new PropertyDescriptor.Builder() +.name("attribute_prefix") +.displayName("Attribute Prefix") +.description("If this property is set, the name of attributes will be appended by a prefix when they are added to a record.") --- End diff -- I think this is supposed to say "prepended with a prefix" ---
[GitHub] nifi pull request #2587: NIFI-4185 Add XML Record Reader
Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179829486 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag(); + +// root tag validation +if (rootName != null && !rootName.equals(rootTag.getName().toString())) { +final StringBuffer message = new StringBuffer(); +
[GitHub] nifi pull request #2587: NIFI-4185 Add XML Record Reader
Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179838657 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLRecordReader.java --- @@ -0,0 +1,502 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.type.ArrayDataType; +import org.apache.nifi.serialization.record.type.RecordDataType; +import org.apache.nifi.serialization.record.util.DataTypeUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import java.io.IOException; +import java.io.InputStream; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +public class XMLRecordReader implements RecordReader { + +private final ComponentLog logger; +private final RecordSchema schema; +private final String recordName; +private final String attributePrefix; +private final String contentFieldName; + +// thread safety required? +private StartElement currentRecordStartTag; + +private final XMLEventReader xmlEventReader; + +private final Supplier LAZY_DATE_FORMAT; +private final Supplier LAZY_TIME_FORMAT; +private final Supplier LAZY_TIMESTAMP_FORMAT; + +public XMLRecordReader(InputStream in, RecordSchema schema, String rootName, String recordName, String attributePrefix, String contentFieldName, + final String dateFormat, final String timeFormat, final String timestampFormat, final ComponentLog logger) throws MalformedRecordException { +this.schema = schema; +this.recordName = recordName; +this.attributePrefix = attributePrefix; +this.contentFieldName = contentFieldName; +this.logger = logger; + +final DateFormat df = dateFormat == null ? null : DataTypeUtils.getDateFormat(dateFormat); +final DateFormat tf = timeFormat == null ? null : DataTypeUtils.getDateFormat(timeFormat); +final DateFormat tsf = timestampFormat == null ? null : DataTypeUtils.getDateFormat(timestampFormat); + +LAZY_DATE_FORMAT = () -> df; +LAZY_TIME_FORMAT = () -> tf; +LAZY_TIMESTAMP_FORMAT = () -> tsf; + +try { +final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); + +// Avoid namespace replacements + xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + +xmlEventReader = xmlInputFactory.createXMLEventReader(in); +final StartElement rootTag = getNextStartTag(); + +// root tag validation +if (rootName != null && !rootName.equals(rootTag.getName().toString())) { +final StringBuffer message = new StringBuffer(); +
[GitHub] nifi pull request #2587: NIFI-4185 Add XML Record Reader
Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179819209 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLReader.java --- @@ -0,0 +1,133 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.annotation.documentation.CapabilityDescription; +import org.apache.nifi.annotation.documentation.Tags; +import org.apache.nifi.annotation.lifecycle.OnEnabled; +import org.apache.nifi.components.PropertyDescriptor; +import org.apache.nifi.controller.ConfigurationContext; +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.processor.util.StandardValidators; +import org.apache.nifi.schema.access.SchemaNotFoundException; +import org.apache.nifi.serialization.DateTimeUtils; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.RecordReaderFactory; +import org.apache.nifi.serialization.SchemaRegistryService; +import org.apache.nifi.serialization.record.RecordSchema; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Tags({"xml", "record", "reader", "parser"}) +@CapabilityDescription("Reads XML content and creates Record objects. Records are expected in the second level of " + +"XML data, embedded in an enclosing root tag.") +public class XMLReader extends SchemaRegistryService implements RecordReaderFactory { + +public static final PropertyDescriptor VALIDATE_ROOT_TAG = new PropertyDescriptor.Builder() --- End diff -- I am actually in favor of removing this property all together. In order to properly read the records, the Record Readers will need to validate syntax of the data, but I don't believe that it should be validating arbitrary semantic meanings. I.e., I don't think that we should be checking the name of the outer-most element for any specific name. ---
[GitHub] nifi pull request #2587: NIFI-4185 Add XML Record Reader
Github user markap14 commented on a diff in the pull request: https://github.com/apache/nifi/pull/2587#discussion_r179819928 --- Diff: nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/xml/XMLReader.java --- @@ -0,0 +1,133 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.xml; + +import org.apache.nifi.annotation.documentation.CapabilityDescription; +import org.apache.nifi.annotation.documentation.Tags; +import org.apache.nifi.annotation.lifecycle.OnEnabled; +import org.apache.nifi.components.PropertyDescriptor; +import org.apache.nifi.controller.ConfigurationContext; +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.processor.util.StandardValidators; +import org.apache.nifi.schema.access.SchemaNotFoundException; +import org.apache.nifi.serialization.DateTimeUtils; +import org.apache.nifi.serialization.MalformedRecordException; +import org.apache.nifi.serialization.RecordReader; +import org.apache.nifi.serialization.RecordReaderFactory; +import org.apache.nifi.serialization.SchemaRegistryService; +import org.apache.nifi.serialization.record.RecordSchema; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Tags({"xml", "record", "reader", "parser"}) +@CapabilityDescription("Reads XML content and creates Record objects. Records are expected in the second level of " + +"XML data, embedded in an enclosing root tag.") +public class XMLReader extends SchemaRegistryService implements RecordReaderFactory { + +public static final PropertyDescriptor VALIDATE_ROOT_TAG = new PropertyDescriptor.Builder() +.name("validate_root_tag") +.displayName("Validate Root Tag") +.description("If this property is set, the name of root tags (e. g. ...) of incoming FlowFiles will be evaluated against this value. " + +"In the case of a mismatch, an exception is thrown. The treatment of such FlowFiles depends on the implementation " + +"of respective Processors.") +.addValidator(StandardValidators.NON_EMPTY_VALIDATOR) +.expressionLanguageSupported(true) +.required(false) +.build(); + +public static final PropertyDescriptor VALIDATE_RECORD_TAG = new PropertyDescriptor.Builder() --- End diff -- Likewise, I think we should remove this property and this sort of validation as well. If the user wants to validate some specific XML element names, the ValidateRecord processor is a great solution for that, and provides far more flexible validation via schema. ---
[GitHub] nifi issue #2553: Nifi 4908 rebase
Github user david-streamlio commented on the issue: https://github.com/apache/nifi/pull/2553 Alright, sounds good. ---
[GitHub] nifi pull request #2553: Nifi 4908 rebase
Github user david-streamlio closed the pull request at: https://github.com/apache/nifi/pull/2553 ---
[GitHub] nifi issue #2553: Nifi 4908 rebase
Github user MikeThomsen commented on the issue: https://github.com/apache/nifi/pull/2553 Yeah. Since this is your first time, I'd recommend backing up the repo before trying it. Once you've gotten them down to one commit, it won't need to be done again until the review process is done. ---
[jira] [Commented] (NIFI-5048) Typo in description for KeytabCredentialsService controller service
[ https://issues.apache.org/jira/browse/NIFI-5048?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428714#comment-16428714 ] ASF GitHub Bot commented on NIFI-5048: -- Github user scottyaslan commented on the issue: https://github.com/apache/nifi/pull/2612 Reviewing... > Typo in description for KeytabCredentialsService controller service > --- > > Key: NIFI-5048 > URL: https://issues.apache.org/jira/browse/NIFI-5048 > Project: Apache NiFi > Issue Type: Bug > Components: Extensions >Reporter: Andrew Lim >Assignee: Andrew Lim >Priority: Trivial > > KeytabCredentialsService controller service was added in NIFI-4917. > The description has a section: > an administrative is able to choose > Change this to: > an *administrator* is able to choose > > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[GitHub] nifi issue #2612: NIFI-5048 Corrected typo in KeytabCredentialsService contr...
Github user scottyaslan commented on the issue: https://github.com/apache/nifi/pull/2612 Reviewing... ---
[jira] [Commented] (NIFI-5048) Typo in description for KeytabCredentialsService controller service
[ https://issues.apache.org/jira/browse/NIFI-5048?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428713#comment-16428713 ] ASF GitHub Bot commented on NIFI-5048: -- GitHub user andrewmlim opened a pull request: https://github.com/apache/nifi/pull/2612 NIFI-5048 Corrected typo in KeytabCredentialsService controller servi… …ce description You can merge this pull request into a Git repository by running: $ git pull https://github.com/andrewmlim/nifi NIFI-5048 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/nifi/pull/2612.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #2612 commit 28fcfa6fc8e28b145ed899b5bd55c25ed632cab5 Author: Andrew LimDate: 2018-04-06T18:20:20Z NIFI-5048 Corrected typo in KeytabCredentialsService controller service description > Typo in description for KeytabCredentialsService controller service > --- > > Key: NIFI-5048 > URL: https://issues.apache.org/jira/browse/NIFI-5048 > Project: Apache NiFi > Issue Type: Bug > Components: Extensions >Reporter: Andrew Lim >Assignee: Andrew Lim >Priority: Trivial > > KeytabCredentialsService controller service was added in NIFI-4917. > The description has a section: > an administrative is able to choose > Change this to: > an *administrator* is able to choose > > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[GitHub] nifi pull request #2612: NIFI-5048 Corrected typo in KeytabCredentialsServic...
GitHub user andrewmlim opened a pull request: https://github.com/apache/nifi/pull/2612 NIFI-5048 Corrected typo in KeytabCredentialsService controller servi⦠â¦ce description You can merge this pull request into a Git repository by running: $ git pull https://github.com/andrewmlim/nifi NIFI-5048 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/nifi/pull/2612.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #2612 commit 28fcfa6fc8e28b145ed899b5bd55c25ed632cab5 Author: Andrew LimDate: 2018-04-06T18:20:20Z NIFI-5048 Corrected typo in KeytabCredentialsService controller service description ---
[jira] [Commented] (NIFIREG-161) Unable to select bucket and flow UUIDs in flow details panel
[ https://issues.apache.org/jira/browse/NIFIREG-161?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16428711#comment-16428711 ] Scott Aslan commented on NIFIREG-161: - It looks like the tooltips component are adding the 'user-select:none' style to these elements in the DOM. > Unable to select bucket and flow UUIDs in flow details panel > > > Key: NIFIREG-161 > URL: https://issues.apache.org/jira/browse/NIFIREG-161 > Project: NiFi Registry > Issue Type: Bug >Affects Versions: 0.2.0 >Reporter: Bryan Bende >Assignee: Scott Aslan >Priority: Minor > Fix For: 0.2.0 > > > Using master it appears that you can no longer select the UUIDs for the flow > id and bucket id that were added to the flow details panel in the main grid. > This prevents easily copying/pasting the ids. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Assigned] (NIFIREG-161) Unable to select bucket and flow UUIDs in flow details panel
[ https://issues.apache.org/jira/browse/NIFIREG-161?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Scott Aslan reassigned NIFIREG-161: --- Assignee: Scott Aslan > Unable to select bucket and flow UUIDs in flow details panel > > > Key: NIFIREG-161 > URL: https://issues.apache.org/jira/browse/NIFIREG-161 > Project: NiFi Registry > Issue Type: Bug >Affects Versions: 0.2.0 >Reporter: Bryan Bende >Assignee: Scott Aslan >Priority: Minor > Fix For: 0.2.0 > > > Using master it appears that you can no longer select the UUIDs for the flow > id and bucket id that were added to the flow details panel in the main grid. > This prevents easily copying/pasting the ids. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[GitHub] nifi issue #2553: Nifi 4908 rebase
Github user david-streamlio commented on the issue: https://github.com/apache/nifi/pull/2553 So the goal is to get my 23 commits squashed down into a single commit? ---
[jira] [Assigned] (NIFI-5048) Typo in description for KeytabCredentialsService controller service
[ https://issues.apache.org/jira/browse/NIFI-5048?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Andrew Lim reassigned NIFI-5048: Assignee: Andrew Lim > Typo in description for KeytabCredentialsService controller service > --- > > Key: NIFI-5048 > URL: https://issues.apache.org/jira/browse/NIFI-5048 > Project: Apache NiFi > Issue Type: Bug > Components: Extensions >Reporter: Andrew Lim >Assignee: Andrew Lim >Priority: Trivial > > The description has a section: > an administrative is able to choose > Change this to: > an administrator is able to choose > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Created] (NIFI-5048) Typo in description for KeytabCredentialsService controller service
Andrew Lim created NIFI-5048: Summary: Typo in description for KeytabCredentialsService controller service Key: NIFI-5048 URL: https://issues.apache.org/jira/browse/NIFI-5048 Project: Apache NiFi Issue Type: Bug Components: Extensions Reporter: Andrew Lim The description has a section: an administrative is able to choose Change this to: an administrator is able to choose -- This message was sent by Atlassian JIRA (v7.6.3#76005)