VelocityTemplateParserUnit
Gruppe |
|
Funktion |
Erzeugt aus den Daten des Zielbaums und einer Velocity-Template-Datei eine Text-Datei. |
Beschreibung
Mit dieser Integration Unit kann über eine Velocity-Template-Datei eine Text-Datei erzeugt werden.
Aus dem Zielbaum wird intern eine XML-Datei erzeugt. Diese XML-Datei (übergeben mit dem Präfix xmlRoot, siehe Beispiel) wird von der Velocity-Template-Datei verarbeitet, um daraus die endgültige Text-Datei zu erzeugen. Diese Text-Datei kann dann im Antwortweg als Ausgabe der Integration Unit verwendet werden.
Parameterbeschreibung
Parametername |
Erlaubte Werte |
Default-Wert |
Beschreibung |
create root element 'VelocityRoot' |
true, false |
false |
Sollte kein gültiges Root-Element entstehen (z. B. durch mehrere Knoten auf oberster Ebene), muss dieser Parameter auf true gesetzt werden. Dadurch wird ein Top-Level-Element VelocityRoot in der XML-Datei erzeugt. |
template-file |
|
|
Pfad zur Template-Datei mit Velocity-Anweisungen. Beispiel: ./conf/sample.vm |
use Velocity XmlTool |
true, false |
false |
Bei true wird die Variable useXmlTool auf true gesetzt (siehe Beispiel). Diese Variable kann genutzt werden, um auf das intern erzeugte XML mit dem Apache Velocity XmlTool (Version 3.1) zuzugreifen (siehe Beispiel). Das vereinfacht die Velocity-Anweisungen. Wird das XmlTool nicht verwendet, muss mit normalen Java-DOM-Anweisungen gearbeitet werden (siehe Beispiel). |
write created XML to log |
true, false |
false |
Die erzeugte XML-Datei wird in das Log geschrieben. Wichtiger Hinweis: Das funktioniert nur in einem echten Profil-Lauf und nicht im Mapping-Test. |
Beispiel
Im folgenden Beispiel liest das Profil die Quelldaten (input.xml) in die Quellstruktur. Per 1:1-Mapping werden diese in die Zielstruktur übertragen. Aus dem Zielbaum (also die Zielstruktur gefüllt mit Daten) wird die interne XML-Datei erzeugt. Beachten Sie bitte, dass die Quelldaten nicht im XML-Format sein müssen. Die interne XML-Datei wird immer aus dem Zielbaum erstellt. Die Integration Unit verwendet dann die interne XML-Datei und das Velocity-Template, um die endgültige Text-Datei zu erzeugen, die dann im Antwortweg verwendet wird. Beachten Sie, dass die interne XML-Datei im Velocity-Template mit dem Präfix xmlRoot adressiert wird. Lassen Sie das Profil laufen mit den Werten true und false für den Integration-Unit-Parameter use Velocity XmlTool. Im Job-Log finden Sie die intern erzeugte XML-Datei.
Profil: Profile-Test_Velocity_Unit.pak
Profil-Quelldaten: input.xml
Velocity-Template-Datei: sample.vm
## Das ist ein Kommentar (zwei #).
## Die nächste Zeile definiert ein Makro, das nur OHNE XmlTools funktioniert. Das Makro gibt mittels DOM das XML aus.
#macro ( recursive $e $indent )
#
if
( $e.getChildren().size() >
0
)
$indent <$e.getName()>
#foreach ($child in $e.getChildren() )
#recursive( $child
"$indent "
)
#end
$indent </$e.getName()>
#
else
$indent <$e.getName()>
$indent $e.getTextTrim()
$indent </$e.getName()>
#end
#end
#set($i =
" "
)
## Die Variable wird durch den Integration-Unit-Parameter
"useXmlTool"
gesetzt.
#
if
($useXmlTool)
With XmlTool, access by simplified
'XPath'
:
body : $xmlRoot.body.text
##
"name"
und
"last"
sind Funktionen von XmlTool, deswegen geht hier die reine .dot Notation nicht.
last name: $xmlRoot.find(
'/document/properties/author/name/last/full'
).text
email: $xmlRoot.properties.author.email.text
## Ohne XmlTool.
#
else
First, we print out the document tree with a recursive Velocimacro :
#recursive( $xmlRoot.getRootElement() $i )
Next, we access pieces of data directly :
email : $xmlRoot.getRootElement().getChild(
"properties"
).getChild(
"author"
).getChild(
"email"
).getText()
last name : $xmlRoot.getRootElement().getChild(
"properties"
).getChild(
"author"
).getChild(
"name"
).getChild(
"last"
).getChild(
"full"
).getText()
#end