Java apachecamel-SNMP组件

Java apachecamel-SNMP组件,java,nullpointerexception,apache-camel,snmp4j,Java,Nullpointerexception,Apache Camel,Snmp4j,目前,我正在从事一个项目,在该项目中,我接收OPC UA数据,并通过SNMP将其发送到PRTG监控系统。我已经创建了OPC UA数据点和SNMP客户端(具有唯一OID)之间的路由。这里的问题是与PRTG监控系统的连接。当我启动连接时,我在SnmpTrapProducer上得到一个null指针异常。似乎我无法在SNMPTrapProducer.java中创建PDU类型的陷阱 我发现在SnmpTrapProducer.process(Exchange)中创建的PDU陷阱返回NullPointerEx

目前,我正在从事一个项目,在该项目中,我接收OPC UA数据,并通过SNMP将其发送到PRTG监控系统。我已经创建了OPC UA数据点和SNMP客户端(具有唯一OID)之间的路由。这里的问题是与PRTG监控系统的连接。当我启动连接时,我在SnmpTrapProducer上得到一个null指针异常。似乎我无法在SNMPTrapProducer.java中创建PDU类型的陷阱

我发现在SnmpTrapProducer.process(Exchange)中创建的PDU陷阱返回NullPointerException(您可以在图中看到类的各个部分)。我尝试了不同的方法,比如改变消息体类型、不同的端口以及ip地址。但我仍然得到NullPointerException

我必须配置什么,以便陷阱不会返回NullPointer异常

SnmpTrapProducer.java

...
PDU trap = exchange.getIn().getBody(PDU.class);

trap.setErrorIndex(0);
trap.setErrorStatus(0);
trap.setMaxRepetitions(0);
...
以下代码是驼峰路线的配置

from("milo-client:opc.tcp://"
                + OpcConfiguration.getIpAdress() + ":"
                + OpcConfiguration.getPort()
                + "?node=RAW(" + snmpOidDataStructure.getOpcDataStructure().getNodeId() + ")&allowedSecurityPolicies=None")
                .to("stream:out")
                .to("snmp://10.3.248.12:5700?protocol=udp&type=TRAP&snmpVersion=1&oids=" + snmpOidDataStructure.getOid());
OPC组件的消息体如下所示:

{value=Variant{value=[LocalizedText{text=CP, locale=de}, LocalizedText{text=Video, locale=de}, LocalizedText{text=Notfallsäule, locale=de}, LocalizedText{text=CP Notruf 2 [Gleis 2], locale=de}, LocalizedText{text=, locale=de}]}, status=StatusCode{name=Good, value=0x00000000, quality=good}, sourceTime=DateTime{utcTime=131999719975360000, javaDate=Wed Apr 17 12:53:17 CEST 2019}, serverTime=DateTime{utcTime=132164793099138549, javaDate=Fri Oct 25 14:15:09 CEST 2019}}
错误消息:

java.lang.NullPointerException: null
        at org.apache.camel.component.snmp.SnmpTrapProducer.process(SnmpTrapProducer.java:112) ~[Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61) ~[Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:148) ~[Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548) ~[Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) [Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:138) [Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:101) [Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) [Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:97) [Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.apache.camel.component.milo.client.MiloClientConsumer.handleValueUpdate(MiloClientConsumer.java:78) [Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.eclipse.milo.opcua.sdk.client.subscriptions.OpcUaMonitoredItem.lambda$setValueConsumer$0(OpcUaMonitoredItem.java:133) ~[Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.eclipse.milo.opcua.sdk.client.subscriptions.OpcUaMonitoredItem.onValueArrived(OpcUaMonitoredItem.java:191) ~[Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.eclipse.milo.opcua.sdk.client.subscriptions.OpcUaSubscriptionManager.lambda$null$39(OpcUaSubscriptionManager.java:700) ~[Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.eclipse.milo.opcua.stack.core.util.ExecutionQueue$PollAndExecute.run(ExecutionQueue.java:107) ~[Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[na:1.8.0_221]
        at java.util.concurrent.FutureTask.run(Unknown Source) ~[na:1.8.0_221]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[na:1.8.0_221]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[na:1.8.0_221]
        at java.lang.Thread.run(Unknown Source) ~[na:1.8.0_221]

非常感谢任何帮助

SnmpTrapProducer
抛出NPE,因为消息正文似乎是空的

如图所示,问题在于变量
trap
保持
null
。它应该成为这条线上的一个对象

PDU trap = exchange.getIn().getBody(PDU.class);
该行获取消息正文内容,并希望它是org.snmp4j.PDU的一个实例

不幸的是,您没有显示填充消息体的代码,但是我假设消息体是空的

在将消息正文传递到SNMP组件之前,请尝试注销路由中的消息正文

 .log("Message body: ${body}") 

另一种选择是,消息体的类型不是
org.snmp4j.PDU
,但我认为它会抛出一个
TypeConversionException

欢迎这样做!首先,不要发布代码的图片。这对想帮助你的人来说就像砖头对游泳辅助一样有用。第二:不要仅仅发布你认为可能是原因的代码片段。你可能想要阅读,这大大提高了获得有用答案的可能性。您可能会发现的优秀文章也很有帮助,尽管标题很苛刻。请提供您的依赖项配置(maven/gradle)。您使用的Apache Camel是什么?Apache Camel版本:2.25.0 Camel snmp组件提供snmp4j依赖项。它正在使用snmp4j版本3.2.2首先,感谢您的帮助!你对这个问题的看法完全正确。问题是SNMPTrapProducer是ApacheCamel snmp组件的一个类,我无法编辑它。我只是用一系列参数调用组件,在这些参数中,我没有选项更改特定的内容,例如pdu消息体。您是否检查了SNMP的unittests?一般来说,Camel单元测试是如何使用组件的重要来源。也许你会发现测试是如何将数据传递给
SnmpTrapProducer
,并根据你的情况进行调整的。我也检查了,但没有得到任何结果。他们使用的组件和我一样。我还尝试了不同的url设置方法,但它们没有什么区别-总是在同一行中出现空指针异常无法深入挖掘,因为您的问题不包含创建NPE消息的代码。我们可以观察到,该消息无法转换为PDU。可能转换需要的不是消息体包含的内容。我添加了骆驼路由,在这里我调用snmp路由。希望这有助于。。。我必须配置路由以外的任何内容吗?我应该在哪里配置消息正文?