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
Zachęcam do przedstawienia swoich uwag i opinii w polu komentarzy.

Komentarze

Dodaj Komentarz