2017-03-02 124 views
0

我在Java中使用GeoIP2將IP地址轉換爲來自maxmind數據庫的位置信息。Java Geoip2:獲取「java.lang.reflect.InvocationTargetException」異常

我的Java代碼:

try { 
    ClassLoader classLoader = getClass().getClassLoader(); 
    File database = new File(classLoader.getResource("GeoLite2-City.mmdb").getFile()); 

    DatabaseReader reader = new DatabaseReader.Builder(database).build(); 
    InetAddress ipAddress = InetAddress.getByName(ip); 
    CityResponse response = reader.city(ipAddress); 

    City city = response.getCity(); 
    ... 

} catch (UnknownHostException e) { 
    logger.logError(getClass(), "getGeoIp", " transactionId:" + transactionId + " > " + e.getMessage(), null); 
} catch (IOException e) { 
    logger.logError(getClass(), "getGeoIp", " transactionId:" + transactionId + " > " + e.getMessage(), null); 
} catch (GeoIp2Exception e) { 
    logger.logError(getClass(), "getGeoIp", " transactionId:" + transactionId + " > " + e.getMessage(), null); 
} 

我得到java.lang.reflect.InvocationTargetException異常,當我建立我的讀者。我認爲傑克遜版本(2.5.3)與geoip2不兼容。但我無法修復。

我dependecy版本:

<dependency> 
    <groupId>com.maxmind.geoip2</groupId> 
    <artifactId>geoip2</artifactId> 
    <version>2.8.1</version> 
</dependency> 

<dependency> 
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-mapper-asl</artifactId> 
    <version>1.9.13</version> 
</dependency> 

回答

1

使用2.3.0版本geoip2的。

<dependency> 
    <groupId>com.maxmind.geoip2</groupId> 
    <artifactId>geoip2</artifactId> 
    <version>2.3.0</version> 
</dependency> 

2.8.1使用更新版本的Jackson,與您的Jackson依賴關係造成衝突。