gpt4 book ai didi

Nifi 处理器中的 Java ExceptionInInitializer 错误

转载 作者:行者123 更新时间:2023-12-02 00:37:43 28 4
gpt4 key购买 nike

我在创建 Nifi 处理器类的实例时收到 ExceptionInIntializer 错误(代码如下)。在线查看后,该错误是由于静态初始化程序中存在错误而导致的,而我的类中没有该错误。我的代码中是否还有其他内容可能导致此错误?

import ApplicationProperties;
import IndexAttributesUtil;
import ConvertRecordUtil;
import EntityTypeUpdates;
import ViewTypeUtil;
import QueryHelper;
import MServiceLocator;

public class RepProcessor extends AbstractProcessor {

protected final Logger logger = LoggerFactory.getLogger(RepProcessor.class);
private static final ApplicationProperties applicationProperties = new ApplicationProperties();

protected static final PropertyDescriptor HOST = new PropertyDescriptor.Builder().name("Hostname")
.description("").required(true)
.defaultValue(applicationProperties.getHost()).addValidator(StandardValidators.NON_EMPTY_VALIDATOR).build();

protected static final PropertyDescriptor PORT = new PropertyDescriptor.Builder().name("Port")
.description("").required(true).defaultValue(applicationProperties.getPort())
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR).build();

protected static final PropertyDescriptor TIMEOUT = new PropertyDescriptor.Builder().name("Timeout")
.description("").required(true)
.defaultValue(Integer.toString(applicationProperties.getTimeout()))
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR).build();

protected static final PropertyDescriptor MAIN_VIEW = new PropertyDescriptor.Builder().name("Main View")
.description("").required(true).addValidator(StandardValidators.NON_EMPTY_VALIDATOR).build();

protected static final PropertyDescriptor SUB_VIEW = new PropertyDescriptor.Builder().name("Sub-View")
.description("").required(false)
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR).build();

public static final PropertyDescriptor FETCH_SIZE = new PropertyDescriptor.Builder().name("fetch-size")
.displayName("Fetch Size")
.description("")
.defaultValue("10000").required(true).addValidator(StandardValidators.NON_NEGATIVE_INTEGER_VALIDATOR)
.build();

public static final PropertyDescriptor MAX_ROWS_PER_FLOW_FILE = new PropertyDescriptor.Builder()
.name("max-rows-per-flow-file").displayName("Max Rows Per Flow File")
.description("")
.defaultValue("1000").required(true).addValidator(StandardValidators.NON_NEGATIVE_INTEGER_VALIDATOR)
.build();

public static final PropertyDescriptor OUTPUT_BATCH_SIZE = new PropertyDescriptor.Builder()
.name("output-batch-size").displayName("Output Batch Size")
.description("")
.defaultValue("0").required(true).addValidator(StandardValidators.NON_NEGATIVE_INTEGER_VALIDATOR).build();

public static final PropertyDescriptor MAX_FRAGMENTS = new PropertyDescriptor.Builder().name("max-fragments")
.displayName("Maximum Number of Fragments")
.description("")
.defaultValue("0").required(true).addValidator(StandardValidators.NON_NEGATIVE_INTEGER_VALIDATOR).build();

public static final String A_VIEW = "A_VIEW";
public static final String B_VIEW = "B_VIEW";
public static final String C_VIEW = "C_VIEW";
public static final String D_VIEW = "D_VIEW";
public static final String E_VIEW = "E_VIEW";
public static final String F_VIEW = "F_VIEW";
public static final String G_VIEW = "G_VIEW";
public static final String H_VIEW = "H_VIEW";
public static final String I_VIEW = "I_TIE";
public static final String J_MODE = "J_MODE";

private long rowCounter = 0;
private List<PropertyDescriptor> descriptors;
private Set<Relationship> relationships;

public static final Relationship REL_SUCCESS = new Relationship.Builder().name("success")
.description("All status updates will be routed to this relationship").build();
public static final Relationship REL_FAILURE = new Relationship.Builder().name("failure")
.description("FlowFiles that failed to process.").build();

protected MServiceLocator mService;
private Gson gson = new Gson();

protected QueryHelper queryHelper;
protected EntityTypeUpdates EntityTypeUpdates = new EntityTypeUpdates();
protected ResultSet rs;
protected ResultSetMetaData rsmd;
protected ViewTypeUtil viewTypeUtil = new ViewTypeUtil();
protected IndexAttributesUtil indexAttributesUtil = new IndexAttributesUtil();
protected ConvertRecordUtil ConvertRecordUtil = new ConvertRecordUtil();

public RepProcessor() {
logger.info("comes in the constructor");
System.setProperty("javax.net.ssl.keyStore", applicationProperties.getKeyStore());
System.setProperty("javax.net.ssl.keyStorePassword", applicationProperties.getKeyStorePassword());
System.setProperty("javax.net.ssl.keyStoreType", applicationProperties.getKeyStoreType());
System.setProperty("javax.net.ssl.trustStore", applicationProperties.getTrustStore());
System.setProperty("javax.net.ssl.trustStorePassword", applicationProperties.getTrustStorePassword());
}

@Override
protected void init(final ProcessorInitializationContext context) {
final List<PropertyDescriptor> d = new ArrayList<>();

d.add(HOST);
d.add(PORT);
d.add(TIMEOUT);
d.add(MAIN_VIEW);
d.add(SUB_VIEW);
d.add(FETCH_SIZE);
d.add(MAX_ROWS_PER_FLOW_FILE);
d.add(MAX_FRAGMENTS);
d.add(OUTPUT_BATCH_SIZE);

this.descriptors = Collections.unmodifiableList(d);

final Set<Relationship> relationships = new HashSet<>();
relationships.add(REL_SUCCESS);
relationships.add(REL_FAILURE);
this.relationships = Collections.unmodifiableSet(relationships);
}

@Override
protected List<PropertyDescriptor> getSupportedPropertyDescriptors() {
return descriptors;
}

@OnScheduled
public void onScheduled(final ProcessContext context) throws Exception {
this.mService = makeMServiceLocator(context);
}

protected MServiceLocator makeMServiceLocator(ProcessContext context)
throws NumberFormatException, Exception {
return new MServiceLocator(context.getProperty(HOST).getValue(), context.getProperty(PORT).getValue(), Integer
.parseInt(context.getProperty(TIMEOUT).getValue()));
}

@Override
public Set<Relationship> getRelationships() {
return this.relationships;
}

@Override
public void onTrigger(ProcessContext context, ProcessSession session) throws ProcessException {
// add code for onTrigger
}
}

我正在我的测试类中创建此处理器的实例:

public class RepProcessorTest {

EntityTypeUpdates EntityTypeUpdates;
protected static QueryHelper queryHelper;
RepProcessor repSpy;
RepProcessor rep;
MServiceLocator mService;
ResultSet rs;
ResultSetMetaData rsmd;

@Before
public void setup() throws NumberFormatException, Exception {
rep = new RepProcessor();

}

@Test
public void testOnTigger() throws Exception {
}

这是第 44 行的错误:rep = new RepProcessor();

[ERROR] testOnTigger(processors.RepProcessorTest)  Time elapsed: 0.011 s  <<< ERROR!
java.lang.ExceptionInInitializerError
at processors.RepProcessorTest.setup(RepProcessorTest.java:44)
Caused by: java.lang.NumberFormatException: null
at processors.RepProcessorTest.setup(RepProcessorTest.java:44)
[ERROR] Errors:
[ERROR] RepProcessorTest.setup:44 ExceptionInInitializer

最佳答案

ExceptionInitializaerError 意味着某些静态代码或对象中存在错误,并且由于您只有静态变量,因此很可能是由于创建了 PropertyDescriptors 之一。

您发布的错误表明错误的原因是 NumberFormatException: null,这意味着某些静态代码试图将 null 转换为数字。

我猜问题出在这个属性上:

protected static final PropertyDescriptor TIMEOUT = new PropertyDescriptor.Builder().name("Timeout")
.description("").required(true)
.defaultValue(Integer.toString(applicationProperties.getTimeout()))
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR).build();

如果applicationProperties.getTimeout()为null,那么它将把null传递给Integer.toString(),这会导致错误。

关于Nifi 处理器中的 Java ExceptionInInitializer 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57962357/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com