# JAXB: Schema nicht "erben"



## F.S.WhiTeY (14. Dez 2013)

Moin Leute,

einmal das Grundproblem für Leute die nicht so viel lesen wollen:

Beim erben von abstrakten Klassen wird das XML-Schema bei JAXB mit vererbt.

ich hab ein kleines Problem mit JAXB, ich will es hier mal kurz umreißen und werde anstelle meine Projekt-QT's andere Beispiel verwenden. Nicht weil ich den QT nicht rausgeben mag, sondern weil es kürzer wird und dadurch besser zu lesen.

Also gehen wir davon aus, dass ich mehrere Projekte habe:

ProjectBase : Wird als lib in alle anderen Projekte eingebunden und stellt ein Package bereit in dem abstrakte Klassen liegen die einen Rahmen für JAXB-Typen bereitstellen

ProjectImpl1: Hier sollen nun die JAXB-Typen "ausprogrammiert" werden.

Was JAXB angeht ist in den Packages nun folgendes vorhanden:

In der Base, bei den abstrakten Klassen, liegt eine package-info.java sowie ein jaxb.index
In der Impl liegt auch eine package-info.java und ein jaxb.index

Die package-info.java's könnten nun so aussehen:

Für die abstrakten Klassen:

```
@javax.xml.bind.annotation.XmlSchema(
        namespace = "http://meinProj/base",
        elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED,
        attributeFormDefault = javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED,
        xmlns = {
                @javax.xml.bind.annotation.XmlNs(
                        namespaceURI = "http://meinProj/base",
                        prefix = "base"
                )
        })
package de.meinProj.base;
```

Für die Impl:

```
@javax.xml.bind.annotation.XmlSchema(
        namespace = "http://http://meinProj/impl/impl1",
        elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED,
        attributeFormDefault = javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED,
        location = "http://meinProj/base [url]http://meinProj/base/schema/base.xsd[/url] [url]http://meinProj/impl/impl1[/url] http://meinProj/base/schema/impl1.xsd",
        xmlns = {@javax.xml.bind.annotation.XmlNs(namespaceURI = "http://meinProj/impl/impl1", prefix = "impl1"),
                @javax.xml.bind.annotation.XmlNs(prefix = "xsi", namespaceURI = "http://www.w3.org/2001/XMLSchema-instance")
        })
package de.meinProj.impl.impl1;
```

Nun erbt eine Klasse bei der Implementierung von einer abstrakten klasse:


```
@XmlType(name = "Base")
public abstract class Base {
}
```


```
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "BaseImpl")
@XmlRootElement
public class BaseImpl extends Base {
	@XmlElement
        public String someElement;
       
        //Getter, Setter und so weiter...
}
```

Wenn ich jetzt über den 
	
	
	
	





```
JAXBContext
```
 ein 
	
	
	
	





```
Schema
```
 für die "ausprogrammierten" Klassen abrufe, bekomme ich das Schema der abstrakten Klasse von der ich erbe. Ich will aber das Schema der Implementierung haben.

Jemand ne Ahnung wo hier das Problem liegen könnte ?

Ich danke euch schon mal für eure Hilfe!

LG

WhiTeY


----------



## F.S.WhiTeY (15. Dez 2013)

Niemand ne Ahnung oder habe ich doof formuliert? Wenn ihr nicht durchsteigt, dann sagt es mir bitte. Ich werde dann versuchen die Geschichte besser rüber zu bringen 

LG


----------



## dzim (20. Dez 2013)

Nee sorry. Hab zwar früher mal einiges mit JAXB gemacht, aber mit Schema extrahieren hatte ich nichts am Hut. Hab immer nur daraus die Klassen generiert, aber danach nichts mehr damit angestellt...
Ich drück die Daumen, das du das Problem in den Griff bekommst!


----------

