# Marshall in geschachtelter Klasse



## ratnalein (17. Jan 2014)

Hallo zusammen,

ich darf zum Punkt gehen.  Ich habe folgende Klassen:

Customer

```
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
 
@XmlRootElement(name = "customer")
public class Customer {
	
	String name;
	InCustomer test;
	
	public String getName() {
		return name;
	}
 
	@XmlElement
	public void setName(String name) {
		this.name = name;
	}
	
	
	public InCustomer getTest(){
		return test;
	}
	
	@XmlElement
	public void setTest(InCustomer test){
		this.test = test; 
	}
	
}
```

InCustomer

```
import javax.xml.bind.annotation.XmlElement;

public class InCustomer {
	
	private String egal;
	
	public String getEgal() {
		return egal;
	}
 
	public void setEgal(String egal) {
		this.egal = egal;
	}

}
```

Und die main-Klasse:

```
import java.io.File;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

public class JAXBExample {
		public static void main(String[] args) {
	 
		 try {
	 
			File file = new File("D:\\file.xml");
			JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
	 
			Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
			Customer customer = (Customer) jaxbUnmarshaller.unmarshal(file);
			
			 Marshaller marshaller = jaxbContext.createMarshaller();
		        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
		        marshaller.marshal(customer, System.out);
		  } catch (JAXBException e) {
			e.printStackTrace();
		  }
	 
		}
}
```

Mit folgendem test-XML:

```
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer>
	<name>ratna</name>
	<test>gogalop</test>
</customer>
```

Ich hätte eigentlich erwartet, dass mein Programm als Output, das gleiche XML ausspuckt, aber stattdessen sieht das Output so aus:

```
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer>
    <name>ratna</name>
    <test/>
</customer>
```

Was möchte ich hier erzielen?  Wie man anhand der XML-Eingabe sieht, geht es mir um die 2 Unterlemente "name" und "test".  Da "name" vom Typ String ist, ist es einfach, direkt in der Klasse Customer einzubinden.  Ich dachte, statt String tue ich mal als Datentyp die Klasse InCustomer.  InCustomer ist zwar ausgelagert, es muss aber möglich sein.  Ich war vielleicht auch schon halbwegs auf dem richtigen Weg, aber leider nicht perfekt.

Könntet Ihr mir bitte Hilfestellungen geben?  Vielen Dank.

Viele Grüße aus Rheinland,

Eure Ratna


----------



## Attila (20. Jan 2014)

fehlt noch die Annotation
[XML]
@XmlAccessorType(XmlAccessType.FIELD)
public class InCustomer {
[/XML]


----------



## ratnalein (20. Jan 2014)

Hallo Attila,

vielen lieben Dank.

Viele Grüße aus Rheinland,

Eure Ratna


----------

