Apache Digester - Vererbung, Abstrakte Klassen ?

Status
Nicht offen für weitere Antworten.

KSG9|sebastian

Top Contributor
Hi Leute,

ich versuch mit Digester ein XML einzulesen und Beans zu erzeugen.
XML sieht so aus:

Code:
<?xml version="1.0" encoding="UFT-8"?>
<survey>
        <title>test</title>
        <description>blah blah blah</description>
        <page ID="0">
                <question required="true">
                        <text>Testfrage</text>
                        <freeAnswer/>
                </question>
                <question>
                        <text>Testfrage</text>
                        <choose>
                                <chooseText>a</chooseText>
                                <chooseText>b</chooseText>                                         </choose>
                </question>
        </page>
</survey>

So, wenn der Digester das Element "freeAnswer" unter survey/page/question findet, dann soll er die Klasse "TextQuestion" erzeugen. Wenn es ein Element "choose" unter dem selben Zweig gibt, dann soll er die Klasse "SelectQuestion" erzeugen. Beide Klassen erben von "Question".

Problem ist, dass der Digester immer die Klasse "Question" initieren will. Wie kann ich dem erklären, dass er unterscheiden soll zwischen den Klassen bzw. dass er sich die richtige Klasse suchen soll ?

Gruß Sebastian
 

Bleiglanz

Gesperrter Benutzer
lies mal unter

http://www.onjava.com/pub/a/onjava/2004/12/22/jakarta-gems-1.html

es sollte irgendwie so

dig.addObjectCreate("survey/page/question",TextQuestion.class);

gehen.

BTW:

Ich hab das früher auch mit dem Digester gemacht - bei komplexeren Schemata ist der aber doch ziemlich "verwickelt"; bin dann auf JAXB umgestiegen und kann nur sagen, dass das WESENTLICH einfacher in der Handhabung ist...(natürlich auch nicht perfekt!)
 

KSG9|sebastian

Top Contributor
hm..ich schau mir mal JAXB an...!

Code:
dig.addObjectCreate("survey/page/question",TextQuestion.class);

Ja, damit erzeuge ich aber die Klasse TextQuestion. Ich kann im Code aber nicht unterscheiden, ob es eine TextQuestion oder ne SelectQuestion ist. Das entscheidet sich erst innerhalb des question-Elements.

Element freeAnswer: TextQuestion
Element choose: SelectQuestion
 

Bleiglanz

Gesperrter Benutzer
Hmmm, weiss gar nicht ob das geht? Digester arbeitet ja auch SAX basiert und kann also nicht "vorausschauen" -

auch JAXB wird das nicht so machen wie du das vielleicht erwartest, weil dir das gleich das ganze Objektmodell "miterzeugt" und also nicht zwischen den verschiedenen Arten von Questions differenziert wird

warum differenzierst du nicht im xml:

<selectquestion>

und

<freetextquestion>

dann könntest du auch im einem (für JAXB notwendigen) Schema gleich erzwingen, dass eine <freetextquestion> keine <choose> enthalten kann
 

KSG9|sebastian

Top Contributor
hm...jo..

ich glaub so mach ichs, das wird wohl die beste lösung sein..

dann kann ich auch Digester benutzen, das ist kein großer Akt mehr..

Danke und Gruß

Sebastian
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben