Я пишу небольшое приложение веб-службы Java EE 6, предназначенное для преобразования файлов ESRI Shape и передачи данных в другое приложение.Почему geotools бросает MathTransformFactory при запуске как часть приложения Java EE 6?
У меня есть приложение, работающее нормально как приложение командной строки. Однако, перенося код, он начал выдавать исключение во время работы на сервере 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;
}
Этот код прекрасно работает нормально как приложение командной строки. Однако при выполнении этого метода в GlassFish я получаю следующую трассировку стека:
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.
Любая помощь в устранении этой проблемы была бы фантастической.
Спасибо, Грант.
Простое обновление кода отлично работает как единичный тест? Я думаю, что это имеет какое-то отношение к серверу Glassfish, но не может понять, почему. –
Мы попали в эту же ошибку при запуске Geotools в Hadoop. Я не знаю, является ли это идеальным решением, но мы решили это, используя плагин maven-shade для упаковки наших зависимостей с нашим hadoop-job.jar, а не с использованием геотекстов как разделяемой библиотеки через распределенный кеш. – arcdrag