IBM Message Broker - Manipulowanie treścią komunikatu
Autor: Marcin Kasiński
12.06.2012 12:45:49 +0200
W tym miejscu postaram się przedstawić kilka przykładów manipulacji danymi komunikatu.
Parsowanie CDATA
Wyobraźmy sobie sytuacje, że w wejściowym komunikacie mamy dane CDATA, które będziemy chcieli w przepływie sparsować za pomocą odpowiedniego parsera, tak aby odczytać to pole nie jako łańcuch tekstowy, ale jako drzewo XML. Mamy wejściowy XML o poniższej strukturze, gdzie mamy tagi MESSAGE/A, a w nim wartość CDATA zawierający dynamiczną strukturę XML.
<?xml version="1.0" encoding="UTF-8"?> <MESSAGE> <A><![CDATA[<B>beee</B>]]></A> </MESSAGE>
Poniższy kod ESQL do drzewa Environment dodaje zmienną mycdata zawierającą drzewo CDATA z poniższego przykładu.
... CREATE LASTCHILD OF Environment NAME mycdata DOMAIN('XMLNS') PARSE (InputRoot.XMLNS.MESSAGE.A,InputRoot.Properties.Encoding, InputRoot.Properties.CodedCharSetId); ...
Określenie częsci wejściowego XML jako wyjściowy XML
Wyobraźmy sobie wejściowy komunikat XML opakowany poprzez SOAP.
<?xml version="1.0" ?> <soapenv:Envelope xmlns="http://www.abc.com.pl" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <message> <data>mydata</data> </message> </soapenv:Body> </soapenv:Envelope>
Poniższy kod powoduje w komunikacie wyjściowym usunięcie zewnętrznych tagów SOAP.
DECLARE cursor REFERENCE TO InputRoot.XMLNS; DECLARE firstTag CHARACTER; MOVE cursor FIRSTCHILD TYPE 0x01000000; MOVE cursor FIRSTCHILD TYPE 0x01000000; MOVE cursor FIRSTCHILD TYPE 0x01000000; SET firstTag=FIELDNAME(cursor); MOVE cursor PARENT; SET OutputRoot.XMLNS.{firstTag}=cursor;
W rezultacie otrzymamy na wyjściu poniższy komunikat:
<message> <data>mydata</data> </message> powrót
Komentarze
Dodaj Komentarz
Newsletter
Jeżeli chcesz być na bieżąco informowany o aktualnościach i poradach IT zapisz się do naszego newslettera.