JAXB - Unmarshall ein XML-Document das aus zwei XSD Definitionen besteht

sambalmueslie

Bekanntes Mitglied
Hallo

ich möchte eine XML-Datei "unmarshallen" 🙂

Leider funktioniert das mit der XSD Datei nicht so richtig.

ich bekomme die folgende Exception:
javax.xml.bind.UnmarshalException: unexpected element (uri:"http://www.topografix.com/GPX/1/0", local:"gpx"). Expected elements are <{http://www.groundspeak.com/cache/1/0}gpx>

Die XML-Datei sieht so aus:

Code:
<?xml version="1.0" encoding="utf-8"?>
<gpx xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1.0"
	creator="Groundspeak, Inc. All Rights Reserved. http://www.groundspeak.com"
	xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd 
http://www.groundspeak.com/cache/1/0 http://www.groundspeak.com/cache/1/0/cache.xsd"
	xmlns="http://www.topografix.com/GPX/1/0">

mein Schema das ich zum erstellen (XJC) verwende so:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://www.topografix.com/GPX/1/0"
	xmlns:mstns="http://www.topografix.com/GPX/1/0" xmlns="http://www.groundspeak.com/cache/1/0"
	xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
	attributeFormDefault="qualified" elementFormDefault="qualified">

Wäre super wenn mir da jemand auf die Sprünge helfen könnte 🙂

Gruß Oli
 
ah ok 🙂 .. hab es direkt mit dem eclipse plugin versucht.. dann mach dich mal die 2. variante 🙂

das wäre schnuckelig wenn das funktionieren würde 🙂

einen moment 😀
 
hm aber jetzt hab ich zwei ObjectFactory's usw.. das war eigentlich nicht mein wunsch..

sondern ich habe folgende Struktur (vereinfacht)

Code:
<gpx>
 <wpt>
   <cache>
   </cache>
 </wpt>
</gpx>

so und die elemente "gpx,wpt" sind in der Schemadatei "http://www.topografix.com/GPX/1/0" definiert und das element "cache" in einer anderen ("http://www.groundspeak.com/cache/1/0").. jetzt habe ich beides zusammenkopiert in ein komplettes schema,
aber das scheitert eben beim angeben des namensraumes..

Gruß Oli
 
Wenn Du XJC explizit ein Package (-p) mitgibst, gibts dann immer noch mehr als eine ObjectFactory?

Ich dachte, ich hätte das auch schonmal so gemacht, aber das war bei wsimport. Das benutzt zur Serialisierung auch JAXB, von daher dachte ich, das lässt sich einfach übertragen. Ansonsten bin ich nach kurzem Suchen noch auf die Binding-Files gekommen (die man mit -b übergibt). Mit denen habe ich bisher aber nur wenig gemacht, da kann ich Dir leider nicht helfen.

Ansonsten kann ich mir vorstellen, dass das Mergen der verschiedenen Schema-Dateien daran scheitert, dass sie verschiedene targetNamespace-Attribute haben. Oder im schemaLocation-Attribut der XML-Datei stimmt die Angabe nicht mehr. Oder sowas...

Wenn das alles nichts hilft, hoffe ich, dass noch jemand anders mehr Ahnung hat.
 
Du musst beide Packages beim Starten des JAXB Contexts angeben.

hm das geht leider nicht, da in der GPX.xsd kein direkter bezug auf das "cache"-Objekt genommen wird.


Jetzt hab ich mal eine zeile eingefügt
Code:
<xsd:element name="cache" msdata:Prefix="groundspeak" type="cache"/>

aber dann kommt der fehler:

/xjc/ Error [file:/D:/Develop/workspace/GPXFileParser/xsd/gpx10.xsd:50] undefined simple or complex type 'cache'

was mir ja auch einleuchtet, weil der den typ nicht kennt 🙂
nur wie kann ich ihm das beibringen ??

Im anhang hab ich mal die zwei xsd-dateien

Gruß Oli
 

Zurück
Oben