0

I am trying to connect to db2 from a java client running the application as a jar. The jar is a super-jar with all dependencies generated by the shade plugin.

When I run the program from my ide(Netbeans) it runs fine, but when I run it from commandline like this it fails: java -jar target/locationImporter.jar

The exception I get is:

Exception in thread "main" java.lang.NullPointerException
    at com.ibm.as400.access.PortMapper.getServerSocket(PortMapper.java:216)
    at com.ibm.as400.access.AS400ImplRemote.signonConnect(AS400ImplRemote.java:2363)
    at com.ibm.as400.access.AS400ImplRemote.signon(AS400ImplRemote.java:2278)
    at com.ibm.as400.access.AS400.sendSignonRequest(AS400.java:3142)
    at com.ibm.as400.access.AS400.promptSignon(AS400.java:2706)
    at com.ibm.as400.access.AS400.signon(AS400.java:4035)
    at com.ibm.as400.access.AS400.connectService(AS400.java:1184)
    at com.ibm.as400.access.AS400JDBCConnection.setProperties(AS400JDBCConnection.java:3338)
    at com.ibm.as400.access.AS400JDBCDriver.prepareConnection(AS400JDBCDriver.java:1419)
    at com.ibm.as400.access.AS400JDBCDriver.initializeConnection(AS400JDBCDriver.java:1256)
    at com.ibm.as400.access.AS400JDBCDriver.connect(AS400JDBCDriver.java:395)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at dataprep.ConnectionSupplier.getConnection(ConnectionSupplier.java:18)
    at dataprep.SqlFileRunner.runScript(SqlFileRunner.java:65)
    at dataprep.SqlFileRunner.runSqlFile(SqlFileRunner.java:26)
    at dataprep.PrepareDatabase.main(PrepareDatabase.java:26)

The code that fails is:

Class.forName("com.ibm.as400.access.AS400JDBCDriver").newInstance();
return DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD);

Since it runs in my ide, I know that the url, user and password is correct.

My shade plugin is configured like this in my pom:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.3</version>
    <configuration>
        <shadedArtifactAttached>true</shadedArtifactAttached>
        <shadedClassifierName>launcher</shadedClassifierName> 
        <finalName>locationImporter</finalName>
        <createDependencyReducedPom>false</createDependencyReducedPom>
        <minimizeJar>true</minimizeJar>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
        </execution>
    </executions>
</plugin>
Tunaki
  • 132,869
  • 46
  • 340
  • 423
Runar Halse
  • 3,528
  • 10
  • 39
  • 59

1 Answers1

0

After hours of debugging a colleague of mine pointed me in the right direction. Removing the minimizeJar fixes the problem since the shade plugin removed the file "SocketContainerInet" since it was not directly instantiated but via a string-value..

Runar Halse
  • 3,528
  • 10
  • 39
  • 59