このページは Apigee と Apigee ハイブリッドに適用されます。
Apigee Edge のドキュメントを表示する。
概要
このポリシーは、メッセージを拡張マークアップ言語(XML)形式から JavaScript Object Notation(JSON)に変換します。これにより、メッセージの変換方法を制御するための選択肢が多彩になります。
XML 形式のレスポンスを JSON 形式のレスポンスに変換することが目的であると仮定した場合、このポリシーはレスポンス フロー(たとえば Response / ProxyEndpoint / PostFlow)に接続されます。
このポリシーは、標準ポリシーであり、任意の環境タイプにデプロイできます。ポリシータイプと各環境タイプで使用可能かどうかは、ポリシータイプをご覧ください。
概要
代表的な仲介シナリオでは、多くの場合、受信リクエスト フローでの JSON to XML ポリシーを送信レスポンス フローでの XML to JSON ポリシーとペアで使用されます。ポリシーを結合することで、XML のみをネイティブにサポートするバックエンド サービスに対して JSON API を公開できます。
JSON または XML を必要とする可能性がある多様なクライアント アプリで API が使用されるシナリオでは、JSON to JSON ポリシーを条件付きで実行することによって、レスポンスの形式を JSON から XML に動的に設定できます。このシナリオの実装については、フロー変数と条件をご覧ください。
サンプル
JSON と XML の間の変換について詳しくは、こちらの記事をご覧ください。
レスポンスを変換する
<XMLToJSON name="ConvertToJSON"> <Options> </Options> <OutputVariable>response</OutputVariable> <Source>response</Source> </XMLToJSON>
この構成(XML を JSON に変換するために必要な最小限の構成)では、XML 形式のレスポンス メッセージをソースとして受け取り、response OutputVariable に入力された JSON 形式のメッセージが作成されます。Apigee では、この変数の内容が次の処理ステップのメッセージとして自動的に使用されます。
要素リファレンス
このポリシーで構成できる要素と属性は、以下のとおりです。
<XMLToJSON async="false" continueOnError="false" enabled="true" name="XML-to-JSON-1"> <DisplayName>XML to JSON 1</DisplayName> <Source>response</Source> <OutputVariable>response</OutputVariable> <Options> <RecognizeNumber>true</RecognizeNumber> <RecognizeBoolean>true</RecognizeBoolean> <RecognizeNull>true</RecognizeNull> <NullValue>NULL</NullValue> <NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>&</DefaultNamespaceNodeName> <NamespaceSeparator>***</NamespaceSeparator> <TextAlwaysAsProperty>true</TextAlwaysAsProperty> <TextNodeName>TEXT</TextNodeName> <AttributeBlockName>FOO_BLOCK</AttributeBlockName> <AttributePrefix>BAR_</AttributePrefix> <OutputPrefix>PREFIX_</OutputPrefix> <OutputSuffix>_SUFFIX</OutputSuffix> <StripLevels>2</StripLevels> <TreatAsArray> <Path unwrap="true">teachers/teacher/studentnames/name</Path> </TreatAsArray> </Options> <!-- Use Options or Format, not both --> <Format>yahoo</Format> </XMLToJSON>
<XMLtoJSON> 属性
<XMLtoJSON async="false" continueOnError="false" enabled="true" name="XML-to-JSON-1">
次の表に、すべてのポリシーの親要素に共通する属性を示します。
| 属性 | 説明 | デフォルト | 要否 |
|---|---|---|---|
name |
ポリシーの内部名。 管理 UI プロキシ エディタで |
なし | 必須 |
continueOnError |
ポリシーが失敗したときにエラーを返す場合は、 ポリシーが失敗した後もフローの実行を続行する場合は、 |
false | 省略可 |
enabled |
ポリシーを適用するには、 ポリシーを無効にするには、 |
true | 省略可 |
async |
この属性は非推奨となりました。 |
false | 非推奨 |
<DisplayName> 要素
管理 UI プロキシ エディタで name 属性と一緒に使用して、ポリシーのラベルに使用する自然言語名を指定します。
<DisplayName>Policy Display Name</DisplayName>
| デフォルト |
なし この要素を省略した場合、ポリシーの |
|---|---|
| 要否 | 省略可 |
| タイプ | 文字列 |
<Source> 要素
JSON に変換する XML メッセージを指定する変数。
ソース メッセージの HTTP Content-type ヘッダーを application/xml に設定する必要があります。設定されていない場合、ポリシーは適用されません。
<Source> が定義されていない場合は、message として処理されます(ポリシーがリクエスト フローに接続されている場合は request、ポリシーがレスポンス フローに接続されている場合は response に解決されます)。
ソース変数を解決できない場合、あるいはメッセージ以外のタイプに解決される場合、ポリシーによってエラーが返されます。
<Source>response</Source>
| デフォルト | Source 要素の値 |
|---|---|
| 要否 | 省略可 |
| 型 | メッセージ |
<OutputVariable> 要素
XML から JSON 形式への変換の出力を保存する場所を指定します。通常、この要素はポリシー構成に含まれません。
Apigee は、Source で指定された XML メッセージのペイロードを解析し、JSON に変換します。結果を OutputVariable のペイロードに格納して、OutputVariable メッセージの HTTP Content-type ヘッダーを application/json に設定します。
OutputVariable が指定されていない場合、デフォルトで Source の値が使用されます。たとえば、source が response である場合、OutputVariable のデフォルトは response になります。
<OutputVariable>response</OutputVariable>
| デフォルト | Source で指定されたメッセージ |
|---|---|
| 要否 | 省略可 |
| 型 | メッセージ |
<Options>
Options により、XML から JSON への変換を制御できます。特定の変換設定を追加できる <Options> グループ、または事前定義オプションのテンプレートを参照できる <Format> 要素を使用します。<Options> と <Format> の両方を使用することはできません。
<Format> を使用しない場合は <Options> が必要です。
<RecognizeNumber> 要素
true の場合、XML ペイロードの数値フィールドでは元の形式が維持されます。
<RecognizeNumber>true</RecognizeNumber>
以下の XML の例を考えてみましょう。
<a> <b>100</b> <c>value</c> </a>
RecognizeNumber が true の場合、ポリシーは次のように変換します。
{
"a": {
"b": 100,
"c": "value"
}
}RecognizeNumber が false の場合、ポリシーは次のように変換します。
{
"a": {
"b": "100",
"c": "value"
}
}| デフォルト | false |
|---|---|
| 要否 | 省略可 |
| 型 | ブール値 |
<RecognizeBoolean> 要素
変換の際に true / false ブール値が維持され、文字列に変換されません。
<RecognizeBoolean>true</RecognizeBoolean>
次の XML 例の場合、以下のように変換されます。
<a> <b>true</b> <c>value</c> </a>
RecognizeBoolean が true の場合、ポリシーは次のように変換します。
{
"a": {
"b": true,
"c": "value"
}
}RecognizeBoolean が false の場合、ポリシーは次のように変換します。
{
"a": {
"b": "true",
"c": "value"
}
}| デフォルト | false |
|---|---|
| 要否 | 省略可 |
| 型 | ブール値 |
<RecognizeNull> 要素
空の値を null 値に変換できます。
<RecognizeNull>true</RecognizeNull>
以下の XML の場合:
<a> <b></b> <c>value</c> </a>
RecognizeNull が true で、NullValue オプションがない場合、この XML は次のように変換されます。
{
"a": {
"b": null,
"c": "value"
}
}RecognizeNull が false の場合、この XML は次のように変換されます。
{
"a": {
"b": {},
"c": "value"
}
}| デフォルト | false |
|---|---|
| 要否 | 省略可 |
| 型 | ブール値 |
<NullValue> 要素
ソース メッセージで認識された null 値を変換する値を示します。デフォルトでは、値は null です。このオプションは、RecognizeNull が true の場合にのみ有効です。
<NullValue>not-present</NullValue>
以下の XML の場合:
<a> <b></b> <c>value</c> </a>
RecognizeNull が true で、NullValue が指定されていない場合、この XML は次のように変換されます。
{
"a": {
"b": null,
"c": "value"
}
}RecognizeNull が true で、NullValue が not-present の場合、この XML は次のように変換されます。
{
"a": {
"b": "not-present",
"c": "value"
}
}| デフォルト | null |
|---|---|
| 要否 | 省略可 |
| タイプ | 文字列 |
名前空間オプション
デフォルトでは、このポリシーは生成される JSON の XML 名前空間を省略します。XML ドキュメント内の名前空間を生成 JSON に変換するように指定するには、これらの要素を一緒に使用します。
<NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>&</DefaultNamespaceNodeName> <NamespaceSeparator>***</NamespaceSeparator>
以下の XML の例を考えてみましょう。
<a xmlns="http://ns.com" xmlns:ns1="http://ns1.com"> <ns1:b>value</ns1:b> </a>
NamespaceSeparator が指定されていない場合、次の JSON 構造が生成されます。
{
"a": {
"b": "value"
}
}NamespaceBlockName 要素、DefaultNamespaceNodeName 要素、NamespaceSeparator 要素がそれぞれ #namespaces、&、*** として指定されている場合、次の JSON 構造が生成されます。
{
"a": {
"#namespaces": {
"&": "http://ns.com",
"ns1": "http://ns1.com"
},
"ns1***b": "value"
}
}| デフォルト | なし。<NamespaceBlockName> が指定されていない場合、ソース メッセージが名前空間を参照しているかどうかに関係なく、XML 名前空間を参照しない出力 JSON が生成されます。 |
|---|---|
| 要否 | 省略可 ただし、 <NamespaceBlockName> を指定する場合は、その他の 2 つの要素も指定する必要があります。 |
| 型 | 文字列 |
テキスト オプション
これらの要素を一緒に使用します。
<TextAlwaysAsProperty>true|false</TextAlwaysAsProperty>
<TextNodeName>TEXT</TextNodeName>子として単一のテキストノードのみを含む XML 要素がポリシーで検出されると、その XML 要素のテキスト コンテンツが JSON ハッシュのプロパティに変換されます。
混合コンテンツの複数の子を含む XML 要素がポリシーで検出された場合、これらのオプションを使用すると、子テキストノードの出力 JSON を制御できます。
たとえば、次のポリシー構成について考えてみます。
<XMLToJSON name='XMLToJSON-1'>
<Options>
<TextAlwaysAsProperty>???</TextAlwaysAsProperty>
<TextNodeName>#text</TextNodeName>
</Options>
</XMLToJSON>指定された XML 入力に対して、TextAlwaysAsProperty が true か false かに応じて、ポリシーは次の出力を生成します。
| XML 入力 | JSON 出力 | |
|---|---|---|
TextAlwaysAsProperty が false の場合 |
TextAlwaysAsProperty が true の場合 |
|
<a>value1</a> |
{
"a": "value1"
} |
{
"a": {
"#text": "value1"
}
} |
<a>value1 <b>value2</b> </a> |
{
"a": {
"#text": "value1\n",
"b": "value2"
}
} |
{
"a": {
"#text": "value1\n",
"b": {
"#text": "value2"
}
}
} |
| デフォルト | <TextAlwaysAsProperty>: false<TextNodeName>: (空白文字列) |
|---|---|
| 要否 | 省略可 |
| 型 | <TextAlwaysAsProperty>: ブール値<TextNodeName>: 文字列 |
属性オプション
これらの要素を組み合わせることで、属性値を JSON ブロックにグループ化し、属性名に接頭辞を追加できます。
<AttributeBlockName>FOO_BLOCK</AttributeBlockName> <AttributePrefix>BAR_</AttributePrefix>
以下の XML の例を考えてみましょう。
<a attrib1="value1" attrib2="value2"/>
XML to JSON の例で定義されているように、両方の属性(AttributeBlockName と AttributePrefix)が指定されている場合、次の JSON 構造が生成されます。
{
"a": {
"FOO_BLOCK": {
"BAR_attrib1": "value1",
"BAR_attrib2": "value2"
}
}
}AttributeBlockName のみを指定すると、次の JSON 構造が生成されます。
{
"a": {
"FOO_BLOCK": {
"attrib1": "value1",
"attrib2": "value2"
}
}
}AttributePrefix のみを指定すると、次の JSON 構造が生成されます。
{
"a": {
"BAR_attrib1": "value1",
"BAR_attrib2": "value2"
}
}どちらも指定されていない場合、次の JSON 構造が生成されます。
{
"a": {
"attrib1": "value1",
"attrib2": "value2"
}
}| デフォルト | なし。 |
|---|---|
| 要否 | 省略可 |
| タイプ | 文字列 |
<OutputPrefix> 要素と <OutputSuffix> 要素
これらの要素を一緒に使用して、生成された JSON に接頭辞や接尾辞を適用します。
<OutputPrefix>PREFIX_</OutputPrefix> <OutputSuffix>_SUFFIX</OutputSuffix>
以下の XML の例を考えてみましょう。
<a>value</a>
ポリシー構成が次のようになっているとします。
<XMLToJSON name='XMLToJSON-4'>
<Options>
<OutputPrefix>{ "result": </OutputPrefix>
<OutputSuffix>}</OutputSuffix>
</Options>
</XMLToJSON>次の JSON 構造が生成されます。
{
"result": {
"a": "value"
}
}OutputPrefix と OutputSuffix の一方または両方を省略できます。
これらの要素を使用すると、無効な JSON が生成される可能性があります。たとえば、このポリシー構成を使用すると、次のようになります。
<XMLToJSON name='XMLToJSON-4'>
<Options>
<OutputPrefix>PREFIX_</OutputPrefix>
</Options>
</XMLToJSON>ポリシーによって次のものが生成されますが、これは有効な JSON ではありません。
PREFIX_{
"a" : "value"
}構成で OutputPrefix も OutputSuffix も指定されていない場合、ポリシーは次の JSON 構造を生成します。
{
"a": "value"
}| デフォルト | 上の例をご覧ください。 |
|---|---|
| 要否 | 省略可 |
| タイプ | 文字列 |
<StripLevels> 要素
<Options>
<StripLevels>4</StripLevels>
</Options>SOAP などの XML ペイロードには、変換後の JSON に含めたくない親レベルが多数あることがあります。以下の例では、SOAP レスポンスに多数のレベルが含まれています。
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/Schemata-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <GetCityWeatherByZIPResponse xmlns="http://ws.cdyne.com/WeatherWS/"> <GetCityWeatherByZIPResult> <State>CO</State> <City>Denver</City> <Description>Sunny</Description> <Temperature>62</Temperature> </GetCityWeatherByZIPResult> </GetCityWeatherByZIPResponse> </soap:Body> </soap:Envelope>
State、City、Description、および Temperature レベルに達するまでに 4 つのレベルがあります。<StripLevels> を使用しない場合、変換した後の JSON レスポンスは次のようになります。
{
"Envelope" : {
"Body" : {
"GetCityWeatherByZIPResponse" : {
"GetCityWeatherByZIPResult" : {
"State" : "CO",
"City" : "Denver",
"Description" : "Sunny",
"Temperature" : "62"
}
}
}
}
}JSON レスポンスの最初の 4 つのレベルを削除する場合は、<StripLevels>4</StripLevels> を設定します。これにより、次の JSON が生成されます。
{
"State" : "CO",
"City" : "Denver",
"Description" : "Sunny",
"Temperature" : "62"
}除去できるレベルは、複数の子を含んでいる最初の要素までです。これが意味するところについては、より複雑な JSON の例を見てみましょう。
{
"Envelope" : {
"Body" : {
"GetCityForecastByZIPResponse" : {
"GetCityForecastByZIPResult" : {
"ResponseText" : "City Found",
"ForecastResult" : {
"Forecast" : [
{
"ProbabilityOfPrecipiation" : {
"Nighttime" : "00",
"Daytime" : 10
} ...この例のレベル 3 は GetCityForecastByZIPResponse です。子要素は 1 つだけです。したがって、<StripLevels>3</StripLevels> を使用する(最初の 3 つのレベルを削除する)場合、JSON は次のようになります。
{
"GetCityForecastByZIPResult" : {
"ResponseText" : "City Found",
"ForecastResult" : {
"Forecast" : [
{
"ProbabilityOfPrecipiation" : {
"Nighttime" : "00",
"Daytime" : 10
} ...GetCityForecastByZIPResult には複数の子要素があります。これが複数の子要素を持つ最初の要素であるため、この最後のレベルを <StripLevels>4</StripLevels> を使用して削除できます。これにより、次の JSON が得られます。
{
"ResponseText" : "City Found",
"ForecastResult" : {
"Forecast" : [
{
"ProbabilityOfPrecipiation" : {
"Nighttime" : "00",
"Daytime" : 10
} ...レベル 4 が複数の子を含んだ最初のレベルであるため、これより下のレベルは除去できません。除去レベルを 5、6、7 といった具合に設定しても、引き続き上記のレスポンスが取得されます。
| デフォルト | 0 (レベル除去なし) |
|---|---|
| 要否 | 省略可 |
| タイプ | 整数 |
<TreatAsArray>/<Path> 要素
<Options>
<TreatAsArray>
<Path unwrap="true">teachers/teacher/studentnames/name</Path>
</TreatAsArray>
</Options>この要素の組み合わせにより、XML ドキュメントの値が常に JSON 配列に変換されるようになります。これは、子要素の数がペイロードごとに異なる場合に便利です。Apigee のデフォルトの動作では、同じ名前の複数の子要素は JSON 配列に変換され、単一の子要素は JSON プリミティブに変換されます。TreatAsArray オプションを使用すると、子要素が常に JSON 配列に変換されるようになります。
TreatAsArray を使用すると、配列のデータが毎回同じ方法で返されるため、出力を処理する後続のコードの構造を改善できます。たとえば、$.teachers.teacher.studentnames.name[0] という JSONPath を評価すると、元の XML に 1 つ以上の name 要素が含まれていても、一貫した名前の値が返されます。
XML to JSON のデフォルトの動作を確認し、<TreatAsArray>/<Path> を使用して出力を制御する方法を見てみましょう。
XML ドキュメントに複数回出現する要素が含まれている場合(これは、XML スキーマで要素に maxOccurs='unbounded' が指定されている場合に発生する可能性があります)、XML to JSON ポリシーは自動的にそれらの値を配列に配置します。たとえば、次の XML ブロックを見てみましょう。
<teacher>
<name>teacherA</name>
<studentnames>
<name>student1</name>
<name>student2</name>
</studentnames>
</teacher>これは、特殊なポリシー構成なしで、以下の JSON に自動的に変換されます。
{
"teachers" : {
"teacher" : {
"name" : "teacherA",
"studentnames" : {
"name" : [
"student1",
"student2"
]
}
}
}
}2 人の生徒名が配列に入っています。
ただし、1 人の生徒しか XML ドキュメントに存在しない場合、XML to JSON ポリシーでは自動的にこの値は、下の例で示されているように、文字列の配列でなく、1 つの文字列として扱われます。
{
"teachers" : {
"teacher" : {
"name" : "teacherA",
"studentnames" : {
"name" : "student1"
}
}
}
}これまでの例では、同様のデータが、あるものは配列に、あるものは 1 の文字列にと、さまざまな方法で変換されていました。<TreatAsArray>/<Path> 要素を使用すると、値が 1 つしかない場合でも生徒名が常に配列に変換されるように出力を制御できます。このように構成するには、次のように、配列に入れたい値を含む要素のパスを特定します。
<Options>
<TreatAsArray>
<Path>teachers/teacher/studentnames/name</Path>
</TreatAsArray>
</Options>上述の構成によって、次のような JSON が生成されます。
{
"teachers" : {
"teacher" : {
"name" : "teacherA",
"studentnames" : {
"name" : ["student1"]
}
}
}
}student1 が配列の中に入るようになりました。これで、生徒が 1 人か複数かにかかわらず、次の JSONPath を使用してコード内の JSON 配列から取得できます。
$.teachers.teacher.studentnames.name[0]
<Path> 要素にも unwrap 属性があります。これについては次のセクションで説明します。
| デフォルト | 該当なし |
|---|---|
| 要否 | 省略可 |
| タイプ | 文字列 |
属性
<Options>
<TreatAsArray>
<Path unwrap="true">teachers/teacher/studentnames/name</Path>
</TreatAsArray>
</Options>| 属性 | 説明 | 要否 | 型 |
|---|---|---|---|
| unwrap |
デフォルト: false JSON 出力から要素を削除します。これを使用することで、JSON を合理化、つまりフラット(「ラップ解除」)にします。値を取得するために必要な JSONPath も短くなります。たとえば、 以下に JSON の例を示します。 {
"teachers" : {
"teacher" : {
"name" : "teacherA",
"studentnames" : {
"name" : [
"student1",
"student2"
]}...この例では、 <TreatAsArray>
<Path unwrap="true">teachers/teacher</Path>
<Path unwrap="true">teachers/teacher/studentnames/name</Path>
</TreatAsArray>
{
"teachers" : [{
"name" : "teacherA",
"studentnames" : ["student1","student2"]
}]...
|
省略可 | ブール値 |
その他の例と機能のチュートリアルについては、こちらの Google Cloud コミュニティの記事をご覧ください。
<Format>
Format により、XML から JSON への変換を制御できるようになります。このトピックで説明した特定の Options 要素の組み合わせが含まれている、事前定義テンプレートの名前を入力します。事前定義された形式には次のものがあります。xml.com、yahoo、google、badgerFish。
<Format> 要素か <Options> グループのいずれかを使用します。<Format> と <Options> の両方は使用できません。
以下は、それぞれの事前定義テンプレートの形式定義です。
xml.com
<RecognizeNull>true</RecognizeNull> <TextNodeName>#text</TextNodeName> <AttributePrefix>@</AttributePrefix>
yahoo
<RecognizeNumber>true</RecognizeNumber> <TextNodeName>content</TextNodeName>
<TextNodeName>$t</TextNodeName> <NamespaceSeparator>$</NamespaceSeparator> <TextAlwaysAsProperty>true</TextAlwaysAsProperty>
badgerFish
<TextNodeName>$</TextNodeName> <TextAlwaysAsProperty>true</TextAlwaysAsProperty> <AttributePrefix>@</AttributePrefix> <NamespaceSeparator>:</NamespaceSeparator> <NamespaceBlockName>@xmlns</NamespaceBlockName> <DefaultNamespaceNodeName>$</DefaultNamespaceNodeName>
要素の構文:
<Format>yahoo</Format>
| デフォルト | (なし) |
|---|---|
| 有効な値 | 次のいずれか:xml.com、yahoo、google、badgerFish |
| 要否 | 省略可。ただし、<Options> を使用しない場合は必須。 |
| 型 | 文字列 |
スキーマ
エラー リファレンス
本部分介绍当此政策触发错误时返回的故障代码和错误消息,以及由 Apigee 设置的故障变量。在开发故障规则以处理故障时,请务必了解此信息。如需了解详情,请参阅您需要了解的有关政策错误的信息和处理故障。
运行时错误
政策执行时可能会发生这些错误。
| 故障代码 | HTTP 状态 | 原因 | 修复 |
|---|---|---|---|
steps.xmltojson.ExecutionFailed |
ExecutionFailed |
当输入负载 (XML) 为空或输入 XML 无效或格式有误时,就会出现此错误。 | build |
steps.xmltojson.InCompatibleTypes |
ExecutionFailed |
如果 <Source> 元素中定义的变量类型与 <OutputVariable> 元素不同,则会出现此错误。<Source> 元素中包含的变量类型和 <OutputVariable> 元素必须与此变量完全匹配。 |
build |
steps.xmltojson.InvalidSourceType |
ExecutionFailed |
如果用于定义 <Source> 元素的变量类型无效,则会出现此错误。变量的有效类型为消息和字符串。 |
build |
steps.xmltojson.OutputVariableIsNotAvailable |
ExecutionFailed |
如果 XML 到 JSON 政策 的 <Source> 元素中指定的变量为字符串类型,并且未定义 <OutputVariable> 元素,则会出现此错误。如果 <Source> 元素中定义的变量为字符串类型,则 <OutputVariable> 元素是必填的。 |
build |
steps.xmltojson.SourceUnavailable |
ExecutionFailed |
如果 XML 到 JSON 政策的 <Source> 元素中的 message 变量是以下任一项,便会出现此错误:
|
build |
部署错误
在您部署包含此政策的代理时,可能会发生这些错误。
| 错误名称 | 原因 | 修复 |
|---|---|---|
EitherOptionOrFormat |
如果 XML 到 JSON 政策中未声明 <Options> 或 <Format> 中的一个元素,则 API 代理的部署将失败。
|
build |
UnknownFormat |
如果 XML 到 JSON 政策中的 <Format> 元素定义了未知格式,则 API 代理的部署将失败。预定义格式包括:xml.com、yahoo、google 和 badgerFish。 |
build |
故障变量
发生运行时错误时,系统会设置这些变量。如需了解详情,请参阅您需要了解的有关政策错误的信息。
| 变量 | 其中 | 示例 |
|---|---|---|
fault.name="fault_name" |
fault_name 是故障名称,如上面的运行时错误表中所列。故障名称是故障代码的最后一部分。 | fault.name = "SourceUnavailable" |
xmltojson.policy_name.failed |
policy_name 是抛出故障的政策的用户指定名称。 | xmltojson.XMLtoJSON-1.failed = true |
错误响应示例
{ "fault": { "faultstring": "XMLToJSON[XMLtoJSON-1]: Source xyz is not available", "detail": { "errorcode": "steps.xml2json.SourceUnavailable" } } }
故障规则示例
<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="XML to JSON Faults"> <Step> <Name>AM-SourceUnavailableMessage</Name> <Condition>(fault.name Matches "SourceUnavailable") </Condition> </Step> <Step> <Name>AM-BadXML</Name> <Condition>(fault.name = "ExecutionFailed")</Condition> </Step> <Condition>(xmltojson.XMLtoJSON-1.failed = true) </Condition> </FaultRule>
関連トピック
JSON から XML: JSON to XML ポリシー