Разбор GPX XML "any"-элемента из сгенерированных классов XSD

Я пытаюсь проанализировать файлы Geocaching GPX с помощью Java. Эти файлы GPX основаны на стандартном файле XXD GPX с дополнительным файлом XSD.

Для генерации классов я использую jaxb-maven-plugin.

За исключением из pom.xml:

<plugins>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jaxb2-maven-plugin</artifactId>
        <version>2.3</version>
        <executions>
            <execution>
                <id>xjc</id>
                <goals>
                    <goal>xjc</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <packageName>de.darkspirit510.gpxparser</packageName>
        </configuration>
    </plugin>
</plugins>

XSD-Files:

Моя проблема: базовый XSD определяет любой атрибут для расширения другим XSD. При демонтаже моего файла GPX (с использованием всех соответствующих классов и ObjectFactory) с помощью следующего фрагмента кода:

Gpx gpx = (Gpx) JAXBContext
            .newInstance(Gpx.class, Cache.class, ObjectFactory.class)
            .createUnmarshaller()
            .unmarshal(inputStream);

и файл GPX (кроме)

<wpt lat="52.171967" lon="10.55625">
    <time>2015-07-14T07:00:00Z</time>
    <name>GC5ZA4J</name>
    <desc>Bücherei WF-Nordost by OLEarius, Traditional Cache (1/1.5)</desc>
    <url>http://www.geocaching.com/seek/cache_details.aspx?guid=4ac2a247-bd30-463a-96d7-3586abfebfcc</url>
    <urlname>Bücherei WF-Nordost</urlname>
    <sym>Geocache</sym>
    <type>Geocache|Traditional Cache</type>
    <groundspeak:cache id="5109967" available="True" archived="False" xmlns:groundspeak="http://www.groundspeak.com/cache/1/0">
        <groundspeak:name>Bücherei WF-Nordost</groundspeak:name>
        <groundspeak:placed_by>OLEarius</groundspeak:placed_by>
        <groundspeak:owner id="6606006">OLEarius</groundspeak:owner>
        <groundspeak:type>Traditional Cache</groundspeak:type>
        <groundspeak:container>Other</groundspeak:container>
        [...]
    </groundspeak:cache>
</wpt>

Используя эту комбинацию, я могу создать некоторые классы Java и проанализировать файл геокешинга GPX со всеми полями, определенными в базовом XSD. У немаршализованного объекта есть метод getAny(), который возвращает List, содержащий только один элемент. Моя IDE говорит мне, что элемент имеет класс ElementNSImpl, а не Cache. Согласно некоторым сообщениям в блоге, любой элемент класса GPX и класса Cache требуют специальных аннотаций. Но плагин maven уже генерирует эти аннотации:

GPX класс:

@XmlAnyElement(lax = true)
protected List<Object> any;

Класс кеша:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "cache", namespace = "http://www.groundspeak.com/cache/1/0/1")
public class Cache {

Фактическое содержимое в объекте ElementNSImpl содержит все значения моего файла GPX. Как я могу создать объект класса Cache напрямую?

0 ответов

Другие вопросы по тегам