You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Trivadis IoT卡车模拟器Maven构建运行空指针异常求助

IoT卡车模拟器运行空指针异常问题

我正尝试运行开源IoT卡车模拟器,需对项目进行二次开发,修改路线点位、新增不同IoT设备以适配自身需求。我已下载项目压缩包,完成IntelliJ环境配置后尝试构建运行,但持续出现多个报错,出现频率最高的报错栈如下:

Exception in thread "main" java.lang.RuntimeException: Error running truck stream generator
at com.hortonworks.labutils.SensorEventsGenerator.generateTruckEventsStream(SensorEventsGenerator.java:43)
at com.hortonworks.solution.Lab.main(Lab.java:277)
Caused by: java.lang.NullPointerException
at java.base/java.util.Arrays.sort(Arrays.java:1249)
at com.hortonworks.simulator.impl.domain.transport.route.TruckRoutesParser.parseAllRoutes(TruckRoutesParser.java:77)
at com.hortonworks.simulator.impl.domain.transport.TruckConfiguration.parseRoutes(TruckConfiguration.java:62)
at com.hortonworks.simulator.impl.domain.transport.TruckConfiguration.initialize(TruckConfiguration.java:38)
at com.hortonworks.labutils.SensorEventsGenerator.generateTruckEventsStream(SensorEventsGenerator.java:25)
... 1 more

根据报错信息定位到Lab.java中getResource与getPath相关代码段:

sensorEventsParam.setNumberOfEvents(1000);
sensorEventsParam.setDelayBetweenEvents(delayBetweenEventsMs);
System.out.println(Lab.class.getResource("/" + "routes/neom").getPath());
sensorEventsParam.setRouteDirectory(Lab.class.getResource("/" + "routes/neom").getPath());
sensorEventsParam.setTruckSymbolSize(10000);
SensorEventsGenerator sensorEventsGenerator = new SensorEventsGenerator();
sensorEventsGenerator.generateTruckEventsStream(sensorEventsParam);

我推测问题来源于路径处理逻辑,因为sensorEventsGenerator.generateTruckEventsStream的报错指向getRouteDirectory方法,而该配置值来源于sensorEventsParam的setRouteDirectory方法赋值。求排查思路与解决方案。

项目pom.xml配置

<modelVersion>4.0.0</modelVersion>

<groupId>com.trivadis</groupId>
<version>1.0.0</version>
<artifactId>iot-truck-simulator</artifactId>

<properties>
    <hadoop.miniclusters.version>0.0.15-SNAPSHOT</hadoop.miniclusters.version>
    <scala.version>2.11</scala.version>
    <kafka.version>2.2.0</kafka.version>
    <activemq.version>5.7.0</activemq.version>
    <rabbitmq.version>5.10.0</rabbitmq.version>
    <avro.version>1.8.2</avro.version>        
    <akka.version>2.3.16</akka.version>
    <jpmml.version>1.0.22</jpmml.version>
    <commons.csv.version>1.2</commons.csv.version>
    <commons.lang.version>3.7</commons.lang.version>
    <slf4j.version>1.7.10</slf4j.version>
    <storm.version>0.10.0.2.3.0.0-2557</storm.version>
    <storm.hdfs.version>0.10.0.2.3.0.0-2557</storm.hdfs.version>
    <javax.activation.version>1.2.0</javax.activation.version>
    <jaxb.api.version>2.3.0</jaxb.api.version>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>


<dependencies>
    <dependency>
        <groupId>org.eclipse.paho</groupId>
        <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
        <version>1.1.1</version>
    </dependency>
    
    <!-- Kafka -->
    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-clients</artifactId>
        <version>${kafka.version}</version>
    </dependency>

    <dependency>
        <groupId>org.apache.avro</groupId>
        <artifactId>avro</artifactId>
        <version>1.10.1</version>
    </dependency>

    <dependency>
        <groupId>com.microsoft.azure.sdk.iot</groupId>
        <artifactId>iot-device-client</artifactId>
        <version>1.29.0</version>
    </dependency>

    <!-- ActiveMQ -->
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-core</artifactId>
        <version>${activemq.version}</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client -->
    <dependency>
        <groupId>com.rabbitmq</groupId>
        <artifactId>amqp-client</artifactId>
        <version>${rabbitmq.version}</version>
    </dependency>

    <dependency>
        <groupId>com.typesafe.akka</groupId>
        <artifactId>akka-remote_${scala.version}</artifactId>
        <version>${akka.version}</version>
    </dependency>

    <dependency>
        <groupId>org.jpmml</groupId>
        <artifactId>pmml-evaluator</artifactId>
        <version>${jpmml.version}</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-csv</artifactId>
        <version>${commons.csv.version}</version>
    </dependency>

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>${commons.lang.version}</version>
    </dependency>

    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.11</version>
    </dependency>

    <dependency>
        <groupId>com.sun.activation</groupId>
        <artifactId>javax.activation</artifactId>
        <version>${javax.activation.version}</version>
    </dependency>

    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>${jaxb.api.version}</version>
    </dependency>

    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-core</artifactId>
        <version>${jaxb.api.version}</version>
    </dependency>

    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>${jaxb.api.version}</version>
    </dependency>

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>${slf4j.version}</version>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-idea-plugin</artifactId>
        <version>2.2.1</version>
    </dependency>

</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.2</version>
            <configuration>
                <source>11</source>
                <target>11</target>
            </configuration>
        </plugin>       
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.6.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>java</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <mainClass>com.hortonworks.solution.Lab</mainClass>
                <arguments>
                    <argument>mqtt</argument>
                </arguments>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <archive>
                    <manifest>
                        <mainClass>com.hortonworks.solution.Lab</mainClass>
                    </manifest>
                </archive>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>

        </plugin>
        <plugin>
            <groupId>org.apache.avro</groupId>
            <artifactId>avro-maven-plugin</artifactId>
            <version>${avro.version}</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>schema</goal>
                        <goal>protocol</goal>
                        <goal>idl-protocol</goal>
                    </goals>
                    <configuration>
                        <fieldVisibility>private</fieldVisibility>
                        <sourceDirectory>${project.basedir}/src/main/avro</sourceDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>com.google.cloud.tools</groupId>
            <artifactId>jib-maven-plugin</artifactId>
            <version>1.0.0</version>
            <configuration>
                <from>
                    <image>openjdk:11.0-jre</image>
                </from>
                <to>
                    <image>registry.hub.docker.com/trivadis/iot-truck-simulator</image>
                    <auth>
                        <username>gschmutz</username>
                    </auth>
                </to>
                <container>
                    <mainClass>com.hortonworks.solution.Lab</mainClass>
                    <args>
                        <arg>-h</arg>
                        <arg>mosquitto-1</arg>
                    </args>
                </container>
            </configuration>
        </plugin>           
    </plugins>
</build>

内容的提问来源于stack exchange,提问作者xodust1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:24:04