Java OO-Design für die Handhabung von großen XML

8

Wir entwickeln ein System zur Verarbeitung von XML-Nachrichten.

Die verarbeitende Java-Klasse muss verschiedene Attribute und Werte aus einem größeren XML-Code herauslösen und diese als Parameter an einzelne Handler-Klassen für verschiedene Operationen übergeben.

Wir haben über folgende Optionen nachgedacht:

A)

Übergeben Sie den gesamten XML-Code an jeden Handler und lassen Sie ihn die relevanten Bits extrahieren - aber Sie haben das Gefühl, dass dies ineffizient ist, um den XML-Code jedes Mal weiterzuleiten

B)

Konvertieren Sie das XML in ein DTO oder eine Gruppe kleinerer DTOs und übergeben Sie jedes DTO an den entsprechenden Handler

C)

Schneiden Sie das XML in Schnipsel und übergeben Sie diese an jede Handler-Methode

Wir sind nicht glücklich mit jedem von diesen, also irgendwelche Vorschläge, welche Art zu gehen?

Beispiel-XML

%Vor%

Dies enthält 4 Blöcke, die von 4 Handlern verarbeitet werden, tut man

%Vor%

anderes tut

%Vor%

macht das nächste

%Vor%

und so weiter

    
romesub 10.08.2011, 13:28
quelle

4 Antworten

3

Ich glaube nicht, dass Sie spezielle Design-Überlegungen in Bezug auf Speichernutzung oder Leistung benötigen, also würde ich mit der Lösung gehen, die die geringste Menge an Kodierung beinhaltet und das wäre ein JAXB-Marshaller, um Ihr XML in DTOs zu parsen und dann geht es mit Ihrem Plan B. Vielleicht ist es schwieriger zu installieren als StAX, aber es erspart Ihnen das Schreiben von XML-Parsing.

Ссылка

Wenn Sie Spring verwenden, können Sie sehr einfach eine Bean für org.springframework.oxm.jaxb.Jaxb2Marshaller einrichten Ссылка (8.5.2)

    
ilcavero 10.08.2011, 17:53
quelle
6

B klingt für mich am besten. A ist am ineffizientesten, und C würde vermutlich einen Durchlauf benötigen, um es zu parsen und die Fragmente auszuwählen, und dann einen zweiten Durchlauf, um sie richtig zu behandeln?

Verwenden Sie SAX, um minimale DTO-Sätze für die Übertragung an dedizierte Handler-Klassen zu parsen.

Gute Frage, übrigens. Gut, über diese Dinge im Voraus nachzudenken und 2., 3., 4. Meinung zu bekommen: -)

    
Brian 10.08.2011 13:38
quelle
3

Versucht? Ссылка

Persönlich würde ich ein Datenmodell für das XML erstellen und das Datenmodell herumreichen. Sehen Sie sich die Tutorials an. Mit einem benutzerdefinierten Datamodell können Sie nur die gewünschten Daten in das Modell und für die Handlerklassen zuordnen, die Sie an untergeordnete Knoten oder eine Teilmenge des XML-Datenmodells übergeben können, anstatt an das gesamte Objekt.

Wenn Sie ein XML mit der folgenden Struktur haben

%Vor%

Dann hätten Sie ein Datenmodell in etwa so:

%Vor%

Wo Book einen Verweis auf Author hat. Und dann könnten Sie das Author-Objekt an Ihre Handler-Methode übergeben.

    
netbrain 10.08.2011 13:40
quelle
2

Sie könnten StAX für diesen Anwendungsfall verwenden. Jede processBlock -Operation wirkt sich auf den XMLStreamReader aus, der seinen Status voranbringt, dann können nachfolgende processBlock -Operationen ihr Bit ausführen:

%Vor%     
Blaise Doughan 10.08.2011 14:07
quelle

Tags und Links