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



## sambalmueslie (24. Jan 2010)

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:


```
<?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:


```
<?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


----------



## musiKk (24. Jan 2010)

Hast Du bei XJC beide Schema-Dateien angegeben?


----------



## sambalmueslie (24. Jan 2010)

Wie kann ich das tun??

ich hab einfach versucht aus beiden Dateien eine zu bauen mit wenig erfolg


----------



## musiKk (24. Jan 2010)

Einfach XJC alle benötigten Dateien übergeben; [c]xjc schema1.xsd schema2.xsd[/c].


----------



## sambalmueslie (24. Jan 2010)

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


----------



## sambalmueslie (24. Jan 2010)

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

sondern ich habe folgende Struktur (vereinfacht)


```
<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


----------



## musiKk (24. Jan 2010)

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.


----------



## Noctarius (24. Jan 2010)

Du musst beide Packages beim Starten des JAXB Contexts angeben.


----------



## sambalmueslie (24. Jan 2010)

Noctarius hat gesagt.:


> 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 

```
<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


----------

