Geotools not working with Spring Native GraalVm

27 Views Asked by At

I'm trying to use Geotools lib in a Spring Boot Native, using GraalVm, but always have error with Picocontainer. When using normal Java 21.0.2 version (Not GraalVm/Spring Native) it works perfectly.

Error:

java.lang.InternalError: org.picocontainer.Startable.start()
org.picocontainer.defaults.ImmutablePicoContainerProxyFactory.<clinit>(ImmutablePicoContainerProxyFactory.java:44)
org.picocontainer.defaults.DefaultPicoContainer.<init>(DefaultPicoContainer.java:127)
org.picocontainer.defaults.DefaultPicoContainer.makeChildContainer(DefaultPicoContainer.java:535)
org.geotools.xsd.Configuration.setupContext(Configuration.java:520)
org.geotools.xsd.impl.ParserHandler.startDocument(ParserHandler.java:299)      
[email protected]/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startDocument(AbstractSAXParser.java:294)
[email protected]/com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startDocument(XMLDTDValidator.java:622) 
[email protected]/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.startEntity(XMLDocumentScannerImpl.java:545)
[email protected]/com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.startDocumentParsing(XMLVersionDetector.java:136)
[email protected]/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:875)[...] 

Code to reproduce:

@Test
void convertKmlToGeojson() throws ParseException, IOException, ParserConfigurationException, SAXException {
String kml = "\<kml xmlns="http://www.opengis.net/kml/2.2%5C%22%3E%3CDocument%3E%5Cn%22 +
"\<Placemark\>\\n" +
"\<ExtendedData\>\</ExtendedData\>\\n" +
"  \<Polygon\>\\n" +
"\<outerBoundaryIs\>\\n" +
"  \<LinearRing\>\<coordinates\>22.615720840984466,-2.6129992627326004\\n" +
"22.615720840984466,-3.8632171769875328\\n" +
"24.49774574644212,-3.8632171769875328\\n" +
"24.49774574644212,-2.6129992627326004\\n" +
"22.615720840984466,-2.6129992627326004\</coordinates\>\</LinearRing\>\</outerBoundaryIs\>\</Polygon\>\</Placemark\>\</Document\>\</kml\>";

    ByteArrayInputStream kmlInputStream = new ByteArrayInputStream(kml.getBytes());
    
    Parser parser = new Parser(new KMLConfiguration());
    SimpleFeature f = (SimpleFeature) parser.parse( kmlInputStream );
    Collection collection = (Collection) f.getAttribute("Feature");
    System.out.println(collection);

}

Run./gradlew nativeTest`to get the error.

To make the code more easily reproducible, I made a JUnit test function, but the error also happens with the final version compiled with./gradlew nativeCompile

Versions:

Java 21.0.2-graalce
id 'org.springframework.boot' version '3.1.9'
id 'io.spring.dependency-management' version '1.1.4'
id 'org.graalvm.buildtools.native' version '0.9.28'
implementation 'org.locationtech.jts.io:jts-io-common:1.19.0'
implementation 'org.geotools:gt-main:29.1'
implementation 'org.geotools:gt-geojson:29.1'
implementation 'org.geotools.xsd:gt-xsd-kml:29.1'

Already tried to run using -Pagent to collect and generate reflections metadata configurations and still not working.

0

There are 0 best solutions below