# JAXB und java.nio.file.Path



## Elenteria (2. Mrz 2021)

Hallo Zusammen,

Ich habe Folgendes Problem: Ich möchte mittels JAXB verschiedene Modelklassen serialisieren bzw. deserialisieren. Darunter befindet sich allerdings eine Klasse File mit einem Attribute path vom Typ java.nio.file.Path, was zu folgendem Fehler führt:

```
java.nio.file.Path is an interface, and JAXB can't handle interfaces.
```
#

Ich hab mittlerweile rausbekommen das ich ein eigenen XmlAdapter scheiben und diesen dann mit @XmlJavaTypeAdapter in der Modelklasse bekannt machen muss. Hab ich soweit getan, den Fehler bekomm ich allerdings trotzdem. Hat einer ne Idee was ich falsch mache?

[CODE lang="java" title="path attribute in der Modelklasse"]@XmlElement(name = "path")
@XmlJavaTypeAdapter(XMLPathAdapter.class)
private Path path;[/CODE]

[CODE lang="java" title="Adapter"]public class XMLPathAdapter extends XmlAdapter<String, Object> {

    @Override
    public Object unmarshal(String pathString) throws Exception {
        return Paths.get(pathString);
    }

    @Override
    public String marshal(Object object) throws Exception {
        if (!(object instanceof Path)) {
            throw new IllegalArgumentException("object is not an instance of type java.nio.file.Path");
        }
        Path path = (Path) object;
        return path.toString();
    }
}[/CODE]

Danke schon mal im vorraus


----------



## Robert Zenz (2. Mrz 2021)

Nur geraten: Kann es sein dass du die Klasse ueber getter/setter serialisiert und nicht ueber Felder?


----------



## Elenteria (3. Mrz 2021)

Also die Annotation stehen über den Feldern, nicht über den getter/setter. Oder meintest du was anderes?


----------



## Robert Zenz (3. Mrz 2021)

Ich meinte dass es eigentlich zwei Arten gibt um eine Klasse zu serialisieren, entweder in dem man die Felder direkt anspricht, oder ueber getter/setter der Felder geht. Wenn dein Serialisierer letztere Methode verwendet, wird das Ding vermutlich die Annotation am Feld ignorieren, du muesstest also auf "Feld-Serialisierung" umstellen falls dem nicht der Fall ist.


----------



## Elenteria (3. Mrz 2021)

Die Zugriffsmethode war tatsächlich das Problem.
Ich habe die Klasse mit 

```
@XmlAccessorType(XmlAccessType.FIELD)
```
 Annotiert dann lief es.

Vielen Dank


----------

