0

Java ライブラリを使用して JSON ドキュメントを変換するために、次の Groovy スクリプトを作成しました。しかし、どういうわけか、必要なjarからクラスをロードできません。私はいつも得るjava.lang.ClassNotFoundException: de.is24.gis.geotools.CoordinateTransformer

Jar ファイルは、groovy スクリプトと同じディレクトリにあります。groovy スクリプトを呼び出す方法を編集することはできません。リバーによって自動的に呼び出されます。

import groovy.json.JsonSlurper

geo = new GeoTransformer()
geo.transform(ctx.document)

class GeoTransformer {
    void transform(doc) {
        this.getClass().classLoader.addURL(new File("gis-geotools-1.9.0.jar").toURL())
        def CoordinateTransformer = Class.forName("de.is24.gis.geotools.CoordinateTransformer").newInstance();

        def x = doc.realEstateCommonData.locationDto.geoCoordinateDto.xCoordinate;
        def y = doc.realEstateCommonData.locationDto.geoCoordinateDto.yCoordinate;

        def coords = CoordinateTransformer.transformFromLambertEuToWgs84(x,z)

        println coords.getLatitude()
        println coords.getLongitude()
        def jsonObj = new JsonSlurper().parseText( '{"type" : "Point", "coordinates" : [' + coords.getLatitude() + ',' + coords.getLongitude() + ']}' )

        doc.location = jsonObj       
    }
}
4

2 に答える 2

0

rooLoader にアクセスできない理由は不明ですが、この Groovy スクリプトの実行方法に関係しているに違いありません。

これを試すことができます(明らかにテストされていません)

class GeoTransformer {
    void transform( doc ) {
        def urlLoader = new GroovyClassLoader()
        urlLoader.addURL( new File("gis-geotools-1.9.0.jar").toURL() )

        def coordTransformer = Class.forName( "de.is24.gis.geotools.CoordinateTransformer",
                                              true,
                                              urlLoader ).newInstance()

        def x = doc.realEstateCommonData.locationDto.geoCoordinateDto.xCoordinate;
        def y = doc.realEstateCommonData.locationDto.geoCoordinateDto.yCoordinate;

        def coords = coordTransformer.transformFromLambertEuToWgs84( x, z )

        println coords.latitude
        println coords.longitude

        doc.location = [ type:'Point',
                         coordinates:[ coords.latitude, coords.longitude ] ]
    }
}

一番下のビットを取り除きJsonSlurper、マップを直接作成しただけです(マップdoc.locationである必要があると思います)?

編集:

これは Groovy コンソールで機能します。

def jar = new File( '/path/to/commons-collections-3.2.1.jar' )
def loader = new GroovyClassLoader()
loader.addURL( jar.toURL() )

def bag = Class.forName( 'org.apache.commons.collections.bag.HashBag',
                         true,
                         loader ).newInstance()
bag.add( 'tim' )

println bag
println bag.getClass().name

そしてプリント:

[tim]
org.apache.commons.collections.bag.HashBag
于 2013-08-21T09:12:30.543 に答える