XSLT文字列関数のCDATAによって問題が発生
XSLT文字列関数でCDATAを使用しないでください(value-ofはコンテンツを文字列に変換します)。
たとえば、SOAPアダプタのheader属性をハード・コードするためにマッパーを使用しているとします。 マッパーはデータをエンコードし、実行時にエンドポイント・サービスの問題を引き起こします。
- マッピング:
[Expression for: "header"] "<![CDATA[ <CrosstalkMessage> <CrosstalkHeader> <ProcessCode>1004</ProcessCode> <MessageType>100</MessageType> <ExchangePattern>7</ExchangePattern> <EnterpriseId>ace7d6ae-78a8-f3gh-1d04 -9fe0416d053c</EnterpriseId> <Token>h12749ed-913b-7e3e-2aef -8dd78255cb40</Token> <DestinationId>b3fbf48e-df96-f27d-5fac -38895618064f</DestinationId> <ContentEncoding>utf-8</ContentEncoding> <ContentType>text/xml</ContentType> </CrosstalkHeader> </CrosstalkMessage> ]]>" - コード:
<tns:header xml:id="id_48"> <xsl:value-of xml:id="id_82" select="'<![CDATA[ <CrosstalkMessage> <CrosstalkHeader> <ProcessCode>1004</ProcessCode> <MessageType>100</MessageType> <ExchangePattern>7</ExchangePattern> <EnterpriseId>ace7d6ae -78a8-f3gh-1d04-9fe0416d053c</EnterpriseId> <Token>h12749ed-913b -7e3e-2aef-8dd78255cb40</Token> <DestinationId>b3fbf48e-df96-f27d -5fac-38895618064f</DestinationId> <ContentEncoding>utf -8</ContentEncoding> <ContentType>text/xml</ContentType> </CrosstalkHeader> </CrosstalkMessage> ]]>'"/> </tns:header>
これを行うには:
- ステージ・ファイル処理を使用してXML構造を記述します。
- XMLを不透明のコンテンツとして読み取ります。
- 読取りコンテンツの
decodeBase64を使用してヘッダー要素にマップします。 - XSLTでヘッダー要素を参照する
cdata-section-elements属性を使用します。