Verwendung
Mit
createIf() können Sie Abhängig von einer Bedingung ein Tag in der Zielstruktur erzeugen.Beispiel
Im folgenden Beispiel wird ein Mapping zwischen zwei verschiedenen Formaten für eine Liste von Meldungen benötigt. In der Ausgangsstruktur wird ein Attribut
type dazu verwendet, um die Meldung als intern (type="internal") oder extern (type="external") zu klassifizieren. In der Zielstruktur wird dagegen hierzu entweder das Tag internalRequest oder externalRequest verwendet:Ausgangsstruktur (links) und Zielstruktur (rechts)
|
Feldname |
minOccurs |
maxOccurs |
Feldname |
minOccurs |
maxOccurs |
|
RequestListMsg |
1 |
1 |
RequestListEIMsg |
1 |
1 |
|
request |
0 |
unbounded |
internalRequest |
0 |
unbounded |
|
type (Attr.) |
1 |
1 |
initiator |
1 |
1 |
|
creator |
1 |
1 |
contact |
1 |
1 |
|
contact |
1 |
1 |
issue |
1 |
1 |
|
description |
1 |
1 |
externalRequest |
0 |
unbounded |
|
initiator |
1 |
1 |
|||
|
contact |
1 |
1 |
|||
|
issue |
1 |
1 |
Mit
createIf() können Sie das jeweilige Zielfeld abhängig vom Attribut type erzeugen:Message-Mapping mit createIf()
|
Zielfeld-Mapping |
Wert von Constant() |
|
/RequestListEIMsg=/RequestListMsg |
|
|
/RequestListEIMsg/internalRequest= |
internal |
|
/RequestListEIMsg/internalRequest/initiator= |
|
|
/RequestListEIMsg/internalRequest/contact= |
|
|
/RequestListEIMsg/internalRequest/issue= |
|
|
/RequestListEIMsg/internalRequest= |
external |
|
/RequestListEIMsg/externalRequest/initiator= |
|
|
/RequestListEIMsg/externalRequest/contact= |
|
|
/RequestListEIMsg/externalRequest/issue= |

Die Funktion
removeContexts() ist nötig, weil anstelle des Ausgangsfeldes request das Attribut type abgebildet wird. Für request gibt es daher kein Zielfeld und keinen Kontext in der Zielstruktur. Die type-Queue hat aber trotzdem den request-Kontext gespeichert, so dass die Prozessierung zu früh abbrechen würde, wenn man diesen Kontext nicht löschen würde.Beispiel
|
Ausgangs-Instanz |
Ergebnis |
|
<?xml version="1.0" <RequestListMsg> <request type="internal"> <creator> </request> <request type="external"> <creator> </request> </RequestListMsg> |
<?xml version="1.0" <ns0:RequestListEIMsg <internalRequest> <initiator> </internalRequest> <externalRequest> <initiator> </internalRequest> </ns0:RequestListEIMsg> |