You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by tu...@apache.org on 2022/05/09 20:38:55 UTC
[nifi] branch main updated: NIFI-9991 Fix: The asn1 StandardRecordModelIteratorProvider's interator returns only the first object read from the input stream.
This is an automated email from the ASF dual-hosted git repository.
turcsanyi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new 8aaa3d2f10 NIFI-9991 Fix: The asn1 StandardRecordModelIteratorProvider's interator returns only the first object read from the input stream.
8aaa3d2f10 is described below
commit 8aaa3d2f10205425be94fc9f97c499eab9224b30
Author: Tamas Palfy <ta...@gmail.com>
AuthorDate: Thu May 5 17:45:26 2022 +0200
NIFI-9991 Fix: The asn1 StandardRecordModelIteratorProvider's interator returns only the first object read from the input stream.
This closes #6019.
Signed-off-by: Peter Turcsanyi <tu...@apache.org>
---
.../org/apache/nifi/jasn1/JASN1RecordReader.java | 1 -
.../jasn1/StandardRecordModelIteratorProvider.java | 59 ++++++++++++++++------
2 files changed, 43 insertions(+), 17 deletions(-)
diff --git a/nifi-nar-bundles/nifi-asn1-bundle/nifi-asn1-services/src/main/java/org/apache/nifi/jasn1/JASN1RecordReader.java b/nifi-nar-bundles/nifi-asn1-bundle/nifi-asn1-services/src/main/java/org/apache/nifi/jasn1/JASN1RecordReader.java
index 0111b70abc..d189efcb64 100644
--- a/nifi-nar-bundles/nifi-asn1-bundle/nifi-asn1-services/src/main/java/org/apache/nifi/jasn1/JASN1RecordReader.java
+++ b/nifi-nar-bundles/nifi-asn1-bundle/nifi-asn1-services/src/main/java/org/apache/nifi/jasn1/JASN1RecordReader.java
@@ -144,7 +144,6 @@ public class JASN1RecordReader implements RecordReader {
} else {
return null;
}
-
});
}
diff --git a/nifi-nar-bundles/nifi-asn1-bundle/nifi-asn1-services/src/main/java/org/apache/nifi/jasn1/StandardRecordModelIteratorProvider.java b/nifi-nar-bundles/nifi-asn1-bundle/nifi-asn1-services/src/main/java/org/apache/nifi/jasn1/StandardRecordModelIteratorProvider.java
index ea73c89389..8e4c106f62 100644
--- a/nifi-nar-bundles/nifi-asn1-bundle/nifi-asn1-services/src/main/java/org/apache/nifi/jasn1/StandardRecordModelIteratorProvider.java
+++ b/nifi-nar-bundles/nifi-asn1-bundle/nifi-asn1-services/src/main/java/org/apache/nifi/jasn1/StandardRecordModelIteratorProvider.java
@@ -35,24 +35,32 @@ public class StandardRecordModelIteratorProvider implements RecordModelIteratorP
@Override
@SuppressWarnings("unchecked")
public Iterator<BerType> iterator(InputStream inputStream, ComponentLog logger, Class<? extends BerType> rootClass, String recordField, Field seqOfField) {
- final BerType model;
- try {
- model = rootClass.getDeclaredConstructor().newInstance();
- } catch (ReflectiveOperationException e) {
- throw new RuntimeException("Failed to instantiate " + rootClass.getCanonicalName(), e);
- }
+ if (StringUtils.isEmpty(recordField)) {
+ return new Iterator<BerType>() {
+ @Override
+ public boolean hasNext() {
+ boolean hasNext;
- try {
- final int decode = model.decode(inputStream);
- logger.debug("Decoded {} bytes into {}", new Object[]{decode, model.getClass()});
- } catch (IOException e) {
- throw new RuntimeException("Failed to decode " + rootClass.getCanonicalName(), e);
- }
+ try {
+ hasNext = inputStream.available() > 0;
+ } catch (IOException e) {
+ hasNext = false;
+ }
- final List<BerType> recordModels;
- if (StringUtils.isEmpty(recordField)) {
- recordModels = Collections.singletonList(model);
+ return hasNext;
+ }
+
+ @Override
+ public BerType next() {
+ final BerType model = decode(inputStream, logger, rootClass);
+
+ return model;
+ }
+ };
} else {
+ final BerType model = decode(inputStream, logger, rootClass);
+
+ final List<BerType> recordModels;
try {
final Method recordModelGetter = rootClass.getMethod(JASN1Utils.toGetterMethod(recordField));
final BerType readPointModel = (BerType) recordModelGetter.invoke(model);
@@ -65,8 +73,27 @@ public class StandardRecordModelIteratorProvider implements RecordModelIteratorP
} catch (ReflectiveOperationException e) {
throw new RuntimeException("Failed to get record models due to " + e, e);
}
+
+ return recordModels.iterator();
+ }
+ }
+
+ private BerType decode(InputStream inputStream, ComponentLog logger, Class<? extends BerType> rootClass) {
+ final BerType model;
+
+ try {
+ model = rootClass.getDeclaredConstructor().newInstance();
+ } catch (ReflectiveOperationException e) {
+ throw new RuntimeException("Failed to instantiate " + rootClass.getCanonicalName(), e);
+ }
+
+ try {
+ final int decode = model.decode(inputStream);
+ logger.debug("Decoded {} bytes into {}", new Object[]{decode, model.getClass()});
+ } catch (IOException e) {
+ throw new RuntimeException("Failed to decode " + rootClass.getCanonicalName(), e);
}
- return recordModels.iterator();
+ return model;
}
}