# XML will nicht weder JAXB noch XStream



## Nud3l (25. Aug 2009)

Ich habe ein paar Probleme mit dem exportieren von meinen Modell in eine XML Datei...

Ich habe es mit JAXB probiert und es klappte alles relativ gut bis ich eine Klasse eingebaut habe die aus einen schreibgeschützten Framwork stammt. Da ich in der schreibgeschützten Datei kein default Konstruktor existiert. Einer sagte mir das ich Sachen mit imot auslassen kann nur wie macht man das? Irgendwie bin ich da nicht weiter gekommen.

Aus diesem Grund habe ich dann auf XStream gewechselt da dort kein default Konstruktor benötigt wird. Nur habe ich da beim deserialisieren Probleme es er scheint folgende Fehlermeldung


```
com.thoughtworks.xstream.mapper.CannotResolveClassException:
sbh.ocit.mockups.model.MDomain : sbh.ocit.mockups.model.MDomain
at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:68)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:71)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.PackageAliasingMapper.realClass(PackageAliasingMapper.java:88)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:86)
```

Hier mein Code


```
//MY code: serialize Code:
MDomain speicherMDomain = OcitsimulationSingleton.getInstance().getLnkDomain();
XStream xstream = new XStream(new DomDriver());
FileOutputStream fs = new FileOutputStream(selected);
xstream.toXML(speicherMDomain, fs);

//deserialize Code:
XStream xstream = new XStream(new DomDriver());
FileInputStream fis = new FileInputStream(selected);
MDomain mDomainRead = (MDomain) xstream.fromXML(fis);
```
Der Fehler passiert in der letzten Zeile..

Hat einer ne Idee was ich hier Falsch mache und was ich verändern muss das bei mir das exportieren in XML klappt. 

Oder gibt es noch einen anderen Ansatz den ich vielleicht wähle soll nur langsam habe ich genug vom immer wieder neu einlesen.


----------



## Nud3l (9. Sep 2009)

Hmm wie es scheint kann mir hier keiner helfen 

Kennt denn einer ein andere einfache Möglichkeit wie ich meine Daten in ein XML speichern kann?


----------



## NNiko (9. Sep 2009)

Kann dir leider bei deinem speziellen Problem nicht weiterhelfen, aber vielleicht schaust mal hier nach:
XMLJava Tutorial
da findest du so ziemlich alles.

Gruß


----------



## Guybrush Threepwood (9. Sep 2009)

Zeig mal Dein XML (Ausschnitt).


----------



## Nud3l (9. Sep 2009)

Ich habe mal die erste paar Zeile und die letzten aus dem XML raus kopiert

[XML]<sbh.ocit.mockups.model.MDomain>
  <lnkZentrale>
    <sbh.ocit.mockups.model.MZentrale>
      <zentralenNummer>1</zentralenNummer>
      <lnkFeldgeraet>
        <sbh.ocit.mockups.model.MFeldgeraet>
          <feldgeraetId>5</feldgeraetId>
          <feldgeraetName>fg 5 Kreutzung xy</feldgeraetName>
          <lnkKnoten>
            <sbh.ocit.mockups.model.MKnoten>
              <lnkAPWerte>
                <tx>
                  <containerObject class="sbh.ocit.mockups.ocitsimulation.APWertRkUshortImpl" reference=".."/>
                  <centralNumber>0</centralNumber>
                  <deviceNumber>0</deviceNumber>
                  <protocol>0</protocol>
                  <portNumber>3110</portNumber>
                  <pathPart></pathPart>
                  <pathPartLength>0</pathPartLength>
                  <localAddress>
                    <ZNR>0</ZNR>
                    <FNR>0</FNR>
                  </localAddress>
                  <callbackResponse>0</callbackResponse>
                  <TIMEOUT>900000</TIMEOUT>
                  <retCode>0</retCode>
                  <strippedPathLengthCache>0</strippedPathLengthCache>
                  <ApWertName></ApWertName>
                  <RK>
[/XML]

[XML]                <Channel>0</Channel>
                <name></name>
                <wert>false</wert>
              </digEingang>
            </sbh.ocit.mockups.model.MDetektor>
          </lnkDetektor>
          <lnkListe/>
          <feldgeraetEin>true</feldgeraetEin>
          <tuerAuf>false</tuerAuf>
          <netzSpannungOk>true</netzSpannungOk>
          <kommunikationsStoerung>false</kommunikationsStoerung>
          <vorgangNetzspannung>0</vorgangNetzspannung>
          <vorgangTuerAuf>0</vorgangTuerAuf>
          <vorgangKomStoerung>0</vorgangKomStoerung>
        </sbh.ocit.mockups.model.MFeldgeraet>
      </lnkFeldgeraet>
      <lnkSignalprogramm>
        <sbh.ocit.mockups.model.MSignalprogramm reference="../../lnkFeldgeraet/sbh.ocit.mockups.model.MFeldgeraet/lnkKnoten/sbh.ocit.mockups.model.MKnoten/lnkAPWerte/mSignalprogramm"/>
      </lnkSignalprogramm>
      <rueckrechenVerfahren>2</rueckrechenVerfahren>
      <lnksonderEingriff/>
    </sbh.ocit.mockups.model.MZentrale>
  </lnkZentrale>
  <domainName>domain</domainName>
</sbh.ocit.mockups.model.MDomain>[/XML]


----------



## Guybrush Threepwood (9. Sep 2009)

Sind die Klassen wie z. B. sbh.ocit.mockups.model.MDomain im Classpath? Hast Du bei XStream Aliases gesetzt?


----------



## Nud3l (10. Sep 2009)

Guybrush Threepwood hat gesagt.:


> Sind die Klassen wie z. B. sbh.ocit.mockups.model.MDomain im Classpath? Hast Du bei XStream Aliases gesetzt?



Hi 

Im Java Build Path habe ich unter Source mehre Ordner drin mit der Standart Einstellung Included(All) und ExcludeD(None). Einer von dem enthält auch die Ordner sbh.ocit.mockups.model mit der Datei MDomain. Mehr habe ich da jetzt nicht eingestellt, muss man da noch explizit was anderes angeben?

Bei XStream habe ich jetzt noch keine Aliases gesetzt, das sollte auch erstmal so lauf. Die Aliases kann ich ja später setzten wenn das Programm läuft. Eine zusätzlich Fehlerquelle habe ich erstmal versucht zu vermeiden.

Gruß Tobias


----------



## Guybrush Threepwood (10. Sep 2009)

Hast Du das Objekt mit XStream serialisiert? Falls nicht, serialisiere mal ein Objekt und schau Dir an, ob der selbe Code rauskommt.


----------



## Nud3l (10. Sep 2009)

Hey ich habe jetzt raus bekommen was ich falsch gemacht habe.


Da ich ein Eclipse Plugin verwende muss ich vorher XStream den Classpath mitteilen von meiner Klasse damit er sie erkennt.

so läuft das jetzt
	
	
	
	





```
XStream xstream = new XStream(new DomDriver());
        FileInputStream fis = new FileInputStream(selected);         
        xstream.setClassLoader(MDomain.class.getClassLoader());
        MDomain mDomainRead = (MDomain) xstream.fromXML(fis);
```


----------

