Как экспортировать файл KML с библиотекой JAK или libkml -java?

Я использую объект KML в java. Я хочу экспортировать этот объект в файл. Я пытаюсь написать это с помощью библиотеки JAK с функцией KML.marshal(), но это не удается. Я получаю эту ошибку:

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/xml/bind/marshaller/NamespacePrefixMapper
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at de.micromata.opengis.kml.v_2_2_0.Kml.createMarshaller(Kml.java:642)
    at de.micromata.opengis.kml.v_2_2_0.Kml.marshal(Kml.java:682)
    at de.micromata.opengis.kml.v_2_2_0.Kml.marshal(Kml.java:759)
    at com.nice.nicetrack.KMLGenerator.toKML(KMLGenerator.java:141)
    at com.nice.nicetrack.KMLGenerator.main(KMLGenerator.java:240)
Caused by: java.lang.ClassNotFoundException: com.sun.xml.bind.marshaller.NamespacePrefixMapper
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 17 more

Я не хочу использовать формат XML или String. Только объект КМЛ!! пожалуйста, помогите мне!! Спасибо!


person חנה    schedule 28.10.2014    source источник


Ответы (1)


JAK зависит от архитектуры Java для привязки XML (JAXB) для базовой сериализации XML. KML — это формат XML, поэтому вы должны добавить jar-файлы JAXB в свой путь к классам.

jaxb-api-2.2.jar
jaxb-impl-2.2.jar

Эти зависимости можно найти в файле POM.XML проекта. https://github.com/micromata/javaapiforkml/blob/master/pom.xml

Если вы используете maven для сборки, вы можете добавить записи jaxb непосредственно в файл pom.xml, но они должны быть загружены автоматически, если вы добавите запись JavaAPIforKml, как показано ниже:

<dependency>
    <groupId>de.micromata.jak</groupId>
    <artifactId>JavaAPIforKml</artifactId>
    <version>2.2.1</version>
</dependency>

В противном случае вы можете напрямую искать банки в центральном репозитории Maven:
https://search.maven.org/#browse

person JasonM1    schedule 28.10.2014
comment
Версии, на которые вы указываете, уже довольно старые. Кроме того, JAXB теперь распространяется через репозиторий Central Maven, не рекомендуется использовать download.java.net. - person lexicore; 05.11.2014