1

ESRI シェープ ファイルを変換し、データを別のアプリケーションに渡すための小さな Java EE 6 Web サービス アプリケーションを作成しています。

コマンドラインアプリとしてアプリケーションが正常に動作しています。ただし、コードの移植中に、Glassfish サーバーでの実行中に例外がスローされ始めました。

コードは、座標投影タイプがレガシー アプリの有効な投影であり、ブール値を返す必要があるかどうかを確認しています。

/**
     * Validates that the shape file is using one of the valid coordinate systems. Returns true if
     * the coordinate system is valid.
     * 
     * @param shpFilePath The path to the shape files.
     * @return
     */
    public boolean validCoordinateSystem(String shpFilePath) {
        try {
            ShpFiles shapeFiles = new ShpFiles(shpFilePath);

            PrjFileReader fileReader = new PrjFileReader(shapeFiles);

            CoordinateReferenceSystem coordSystem = fileReader.getCoodinateSystem();

            for (int i = 0; i < this.acceptedCoordinateSystems.length; i++) {

                if (this.acceptedCoordinateSystems[i].equalsIgnoreCase(coordSystem.getName().toString())) {
                    return true;
                }

            }
            fileReader.close();

        } catch (MalformedURLException ex) {
            Logger.getLogger(GeoTools.class.getName()).log(Level.SEVERE, null, ex);

            return false;
        } catch (IOException ioe) {

            Logger.getLogger(GeoTools.class.getName()).log(Level.SEVERE, null, ioe);

            return false;

        } catch (Exception nex){

            Logger.getLogger(GeoTools.class.getName()).log(Level.SEVERE, null, nex);

            return false;
        }

        return false;
    }

このコードは、コマンド ライン アプリとして正常に動作します。ただし、グラスフィッシュでこのメソッドを実行すると、次のスタック トレースが表示されます。

org.geotools.factory.FactoryNotFoundException: No factory of kind "MathTransformFactory" found.
        at org.geotools.factory.FactoryRegistry.getServiceProvider(FactoryRegistry.java:374)
        at org.geotools.factory.FactoryCreator.getServiceProvider(FactoryCreator.java:143)
        at org.geotools.referencing.ReferencingFactoryFinder.getFactory(ReferencingFactoryFinder.java:193)
        at org.geotools.referencing.ReferencingFactoryFinder.getMathTransformFactory(ReferencingFactoryFinder.java:503)
        at org.geotools.referencing.factory.ReferencingObjectFactory.getMathTransformFactory(ReferencingObjectFactory.java:152)
        at org.geotools.referencing.factory.ReferencingObjectFactory.createFromWKT(ReferencingObjectFactory.java:1084)
        at org.geotools.data.shapefile.prj.PrjFileReader.<init>(PrjFileReader.java:78)
        at com.spectrum.demeter.utils.GeoTools.validCoordinateSystem(GeoTools.java:61)
        at com.spectrum.demeter.ejb.Converter.addSurveyToDatabase(Converter.java:117)
        at com.spectrum.demeter.ws.SurveyManager.convertShpToDb(SurveyManager.java:76)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.glassfish.webservices.InstanceResolverImpl$1.invoke(InstanceResolverImpl.java:137)

必要なすべての geotools.jar ファイルがプロジェクトに追加されていることを確認しましたが、このエラーの原因がわかりません (見逃している可能性がありますが)ドキュメントまたは API。

この問題を解決するための助けは素晴らしいでしょう。

ありがとうグラント。

4

2 に答える 2

2

GeoTools を使用した JUnit テストでこの問題が発生しました。vecmath と jsr-275 の依存関係を含める必要があることがわかりました。

于 2014-04-10T13:37:19.163 に答える