SourceUnavailable
エラーコード
steps.json2xml.SourceUnavailable
エラー レスポンスの本文
{ "fault": { "faultstring": "JSONToXML[policy_name ]: Source [source_variable ] is not available", "detail": { "errorcode": "steps.json2xml.SourceUnavailable" } } }
エラーの例
{
"fault": {
"faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available",
"detail": {
"errorcode": "steps.json2xml.SourceUnavailable"
}
}
}
原因
このエラーは、JSON to XML ポリシーの <Source> 要素で指定された message 変数が、次の場合に発生します。
- 範囲外(ポリシーが実行されている特定のフローで使用できない)、あるいは、
- 解決できない(定義されていない)
たとえば、JSON to XML ポリシーがリクエスト フローで実行されるのにもかかわらず、<Source> 要素が、このリクエスト フローにない response 変数に設定されている場合、このエラーが発生します。
診断
エラーが発生した JSON to XML ポリシーと、使用できない変数の名前を特定します。どちらもエラー レスポンスの
faultstring要素にあります。たとえば、次のfaultstringでは、ポリシー名がConvert-JSONToXML、変数がresponseです。"faultstring": "JSONToXML[Convert-JSONToXML]: Source response is notavailable"エラーの発生した JSON to XML ポリシーの XML で、
<Source>要素内に設定された変数名が、上のステップ 1 で faultstring 内に見つけた変数名に一致していることを確認します。たとえば、次の JSON to XML ポリシーでは、<Source>要素でresponseという名前の変数を指定しており、これはfaultstring内の変数名と一致しています。<?xml version="1.0" encoding="UTF-8&quo>t; st<andalone="yes"? JSONToXML async="false" continueOnError="f>alse"<; enabled=&>quot;true" n<ame="Co>nvert-JSO<NToXML">; < Displa>yNameConvert-<JSONToXML>/Dis<playName > Proper<ties/ Opti>ons < NullValueNULL/>NullValue< NamespaceBl>ockName#<namespaces/NamespaceBlock>Name <DefaultNamespaceNo>d<eName$default/Defau>ltNamespaceNo<deName > < NamespaceSe>parator:/Name<spaceSeparator > < TextNodeName#tex>t/TextNodeNam<e A>t<tributeBlockName>#attrs/Attrib<uteBlockName > < AttributePrefix@/Attrib>utePrefix < InvalidChars>Repl<acement_/InvalidCharsR>eplacement < ObjectRoot>Eleme<ntNameRoot/ObjectRoot>ElementName < ArrayRoot>Elem<entNameArray/ArrayRoo>tElementN<ame > A<rrayItemElemen>tNameIt<em/ArrayItemEle>mentName < > /Optio<ns > O<utputVaria>blerequest/OutputVariable Sourceresponse/Source /JSONToXML<Source>要素で使われている変数が定義済みで、JSON to XML ポリシーが実行されるフローで使用できるか確認します。この変数が、
- 範囲外(ポリシーが実行されている特定のフローで使用できない)、あるいは、
- 解決できない(定義されていない)
場合、それがエラーの原因です。
たとえば、上の JSON to XML ポリシーがリクエスト フローで実行されるとします。
response変数が JSON to XML ポリシーの<Source>要素で使われていることを思い出してください。response 変数は、レスポンス フローでのみ使用できます。response変数はリクエスト フローには存在しないため、次のエラーを受け取ることになります。steps.json2xml.SourceUnavailable
解決策
エラーが発生した JSON to XML ポリシーの <Source> 要素には、定義済みで、ポリシーが実行されるフローに存在する変数を使うようにします。
上記の JSON to XML ポリシーの例を修正するには、request 変数がリクエスト フローに存在するので、それを使うように <Source> 要素を修正します。
<?xml version="1.0" encoding="UTF-8&quo>t; stan<dalone="yes"?
JSONToXML async="false" continueOnError="f>alse" <enabled=&qu>ot;true" nam<e="Conv>ert-JSONToX<ML"
> Dis<playNam>eConvert-JSONTo<XML/Displ>ayNa<me
> Properties/
< Options
> < NullValueNULL/Nu>llValue
< NamespaceBlockNam>e#namesp<aces/NamespaceBlockName
> De<faultNamespaceNode>N<ame$default/Default>NamespaceNodeNa<me
> <NamespaceSepa>rator:/Namespac<eSeparator
> < TextNodeName#text/>TextNodeName
< Att>r<ibuteBlockName#a>ttrs/AttributeB<lockName
>A<ttributePrefix@/Attribut>ePrefix
< InvalidCharsRe>plac<ement_/InvalidCharsRep>lacement
< ObjectRootEl>ement<NameRoot/ObjectRootEl>ementName
< ArrayRootEl>emen<tNameArray/ArrayRootE>lementName
< > Array<ItemElementNam>eItem/A<rrayItemElement>Name
< /O>ptions
< > Outp<utVariable>request/OutputVariable
Sourcerequest/Source
/JSONToXML
ExecutionFailed
エラーコード
steps.json2xml.ExecutionFailed
エラー レスポンスの本文
{ "fault": { "faultstring" : "JSONToXML[policy_name]: Execution failed due to reason: Expecting { or [ at line 1", "detail": { "errorcode": "steps.json2xml.ExecutionFailed" } } }
考えられる原因
このエラーには、次の原因が考えられます。
| 原因 | 説明 |
| Missing input payload | 入力ペイロード(JSON)が空です。 |
| Invalid or Malformed Input | JSON to XML ポリシーの入力(JSON)が無効または不正な形式です。 |
原因: Missing input payload
JSON to XML ポリシーで、<Source> 要素内で指定された変数の内容(ペイロード)が空の場合、このエラーが発生します。
たとえば、JSON to XML ポリシー内の <Source> 要素が request 変数あるいは response 変数として設定され、この変数に JSON のペイロードが入っていると想定されているにもかかわらず、ペイロードが空の場合、このエラーが発生します。
診断
エラーが発生した JSON to XML ポリシーを特定します。この情報はエラー レスポンスの
faultstring要素にあります。たとえば、以下のfaultstringでは、ポリシー名はConvert-JSONToXMLです。"faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [at line 1"エラーの発生した JSON to XML ポリシーの XML で
<Source>要素を調べ、指定された変数を見つけます。たとえば、以下の JSON to XML ポリシーには、requestに設定された<Source>要素があります。<?xml version="1.0" encoding="UTF-8&quo>t; st<andalone="yes"? JSONToXML async="false" continueOnError="f>alse&<quot; enabl>ed="true&quo<t; name=&quo>t;Con<vert-JSONTo>XML&q<uot; > Display<NameConve>rt-J<SONToXML/D>isplayNam<e Properties/ > Options< NullValueN>ULL/NullV<alue NamespaceBl>ockName#<namespaces/NamespaceBlock>Name < DefaultNamespa>c<eNodeName$default/D>efaultNam<espaceNodeNa>me < Namespa>ceSeparat<or:/NamespaceSepar>ator < TextNodeName>#text/Tex<tNodeName > < AttributeBlock>Name#attr<s/AttributeBlockName > < AttributePrefix@/At>tributePr<efix InvalidC>hars<Replacement_/InvalidCh>arsReplac<ement Object>RootE<lementNameRoot/Object>RootEleme<ntName Array>Root<ElementNameArray/Arra>yRoot<ElementN>ame < ArrayIt>emEleme<ntNameItem/Arra>yItem<Elemen>tName < /Opt>ions < Output>Variablerequest/OutputVariable Sourcerequest/Source /JSONToXMLポリシーの
<Source>要素で指定された変数が空かどうか確認します。空ならば、それがエラーの原因です。上記の JSON to XML ポリシーの例では、クライアントが送信したリクエスト ペイロード(すなわち、リクエスト本文)が空になっています。
例:
curl -v "ht<tp:>/</or>g-env.apigee.net/v1/testjsontoxml" -H "Content-Type: application/json"JSON レスポンスのペイロードが空なので、次のエラーコードを受け取ります。
steps.json2xml.ExecutionFailedこのエラーは、
<Source>要素がレスポンスに設定されているにもかかわらず、バックエンド サーバーが空のペイロードを渡した場合にも発生する可能性があります。
解決策
<Source> 要素では、必ず空でなく有効な JSON ペイロードである入力を、JSON to XML ポリシーに渡すようにします。
上記のサンプル JSON to XML ポリシーの問題を解決するには、有効な JSON ペイロードを渡すようにします。例:
次のような内容のファイル
city.jsonを作成します。{ "Name":"Apigee", "City":"Bengaluru", "Pincode":"560016" }次の cURL コマンドで API を呼び出します。
curl -v "ht<tp:>/</or>g-env.apigee.net/v1/testxmltojson" -H "Content-Type: application/json" -X POST -d @company.json
原因: Invalid or Malformed Input
JSON to XML ポリシーが、無効あるいは不正な形式の入力を解析した場合、このエラーが発生します。
たとえば、次の無効な JSON が JSON to XML ポリシーの入力として渡されたとします。
[
"args": ["name" : "Google" ]
]
すると、次のエラーを受け取ります。
"faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
診断
エラーが発生した JSON to XML ポリシーを特定します。この情報はエラー レスポンスの
faultstring要素にあります。たとえば、以下のfaultstringでは、ポリシー名はConvert-JSONToXMLです。"faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [at line 1"エラーの発生した JSON to XML ポリシーの XML で指定された
<Source>要素を調べます。たとえば、次の JSON to XML ポリシーには、request変数に設定された<Source>要素があります。<?xml version="1.0" encoding="UTF-8&quo>t; st<andalone="yes"? JSONToXML async="false" continueOnError="f>alse&qu<ot; enabled>="true"< name=">Convert<-JSONToXML&>quot; < Di>splayNameCo<nvert-JSO>NToX<ML/Display>Name <Properties/ >Options < NullValueNUL>L/NullValue< NamespaceBloc>kName#na<mespaces/NamespaceBlockNa>me < DefaultNamespace>N<odeName$default/Def>aultNamespa<ceNodeName > < Namespace>Separator:/<NamespaceSeparator> < TextNodeName#t>ext/TextNod<eName > <AttributeBlockNa>me#attrs/At<tributeBlockName > < AttributePrefix@/Attr>ibutePrefix< InvalidCha>rsRe<placement_/InvalidChar>sReplacemen<t ObjectRo>otEle<mentNameRoot/ObjectRo>otElementNa<me ArrayRo>otEl<ementNameArray/ArrayR>ootElem<entName<>/span> < ArrayItemEl>ementNa<meItem/ArrayIte>mElemen<tName<>/span> /<Options> < OutputVa>riablerequest/OutputVariable Sourcerequest/Source /JSONToXML<Source>要素で指定された入力が有効な JSON ペイロードかどうか確認します。入力が無効か不正な形式であれば、それがエラーの原因です。次の無効な JSON がポリシーに渡されたとします。
[ "args": ["name" : "Google" ] ]次のサンプルの API 呼び出しは、リクエストがどのように渡されたかを示します。
curl -v "ht<tp:>/</or>g-env.apigee.net/v1/testjsontoxml" -H "Content-Type: application/json" -X POST -d '[ "args" : ["name" : "Google" ]]'リクエストで渡された JSON ペイロードは、JSON オブジェクトの始まりと終わりが各かっこ([ ])のため、無効となります。このため、次のエラーとなります。
steps.json2xml.ExecutionFailedこのエラーは、
<Source>要素がレスポンスに設定されているにもかかわらず、JSON レスポンスのペイロードが無効あるいは不正な形式な場合にも発生する可能性があります。
解決策
<Source> 要素の JSON to XML ポリシーには、必ず有効で不正な形式ではない入力を渡すようにします。
上記で説明したサンプル JSON to XML ポリシーの問題を解決するには、次のように有効な JSON ペイロードのリクエストを渡します。
{
"args" : {
"name" : "Google"
}
}
OutputVariableIsNotAvailable
エラーコード
steps.json2xml.OutputVariableIsNotAvailable
エラー レスポンスの本文
{ "fault": { "faultstring" : "JSONToXML[policy_name]: Output variable is not available.", "detail": { "errorcode": "steps.json2xml.OutputVariableIsNotAvailable" } } }
エラーの例
{
"fault": {
"faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available.",
"detail": {
"errorcode": "steps.json2xml.OutputVariableIsNotAvailable"
}
}
}
原因
このエラーは、JSON to XML ポリシーの <Source> 要素で指定した変数が文字列型で、<OutputVariable> 要素が定義されていない場合に発生します。<Source> 要素で定義された変数が文字列型の場合、<OutputVariable> 要素が必要です。
診断
エラーが発生した JSON to XML ポリシーを特定します。これは、エラー レスポンスの
faultstring要素にあります。たとえば、以下のfaultstringでは、ポリシー名はCheck-JSONToXMLです。"faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."エラーの発生した JSON to XML ポリシーで、
<OutputVariable>が抜けていないか確認します。以下のサンプル JSONToXML ポリシーには
<OutputVariable>要素がありません。<?xml version="1.0" encoding="UTF-8&quo>t; st<andalone="yes"? JSONToXML async="false" continueOnError>="fa<lse" e>nabled="tr<ue" nam>e="J<SONToXML&qu>ot; < Disp>layNameCheck-<JSONToXML>/Dis<playName > Proper<ties/ Opti>ons < NullValueNULL/>NullValue < NamespaceBlockN>ame#name<spaces/NamespaceBlockName> <DefaultNamespaceNo>d<eName$default/Defau>ltNamespaceNo<deName > < NamespaceSe>parator:/Name<spaceSeparator > < TextNodeName#tex>t/TextNodeNam<e A>t<tributeBlockName>#attrs/Attrib<uteBlockName > < AttributePrefix@/Attrib>utePrefix < InvalidChars>Repl<acement_/InvalidCharsR>eplacement < ObjectRoot>Eleme<ntNameRoot/ObjectRoot>ElementName < ArrayRoot>Elem<entNameArray/ArrayRoo>tElementN<ame > A<rrayIt>emElementN<ameItem>/Arra<yItemEleme>ntName /Options SourcePostalCode/Source /JSONToXML以下のように、
<Source>要素で指定された変数の型を特定します。- API プロキシのコード内で、最初にその変数が定義された場所を特定します。
- その変数が最初に定義、設定されるポリシーを特定したら、次のように変数の型を特定する必要があります。
- type 属性の値を確認します(もしあれば)。
- type 属性がない場合、変数は文字列とみなされます。
- 変数の型が文字列の場合、それがエラーの原因です。一般的な変数とその型については、変数リファレンスをご覧ください。
たとえば、上記の JSON to XML ポリシーの
PostalCode変数に注目してください。たとえば、下のように、Assign Message ポリシーを使って、変数
PostalCodeに値を割り当てるとします。<?xml version="1.0" encoding="UTF-8&quo>t; st<andalone="yes"? AssignMessage async="false" continueOnError="f>alse"<; enabled=&>quot;true" n<ame="As>sign_Post<alCode">; < DisplayNameAs>sign_PostalCo<de/D>isplayName< > Propertie<s/ > AssignVaria<ble > Nam<ePos>talCode/N<ame > Value{&q<uot;value":"560>08&q<uot;}/Value Re>f/ < /AssignVariable IgnoreUnresolvedVariablestrue/Ign>oreUn<resolvedVariab>lesAssignTo createNew="false" transport="http" type="request"/ /AssignMessage<AssignVariable>に設定される変数の型は文字列です。したがって、変数PostalCodeの型は文字列です。ここで、
PostalCode変数は、下のように JSONToXML ポリシーの<Source>要素で使われていることを思い出してください。<Source>PostalCode</Source>PostalCodeが文字列型であり、<OutputVariable>要素がないので、次のエラーが発生します。steps.json2xml.OutputVariableIsNotAvailable
解決策
JSONToXML ポリシーの <Source> 要素で指定した変数が文字列型の場合、必ずポリシーで <OutputVariable> を指定するようにします。
上記のように JSONToXML ポリシーを修正するには、次のように <OutputVariable> 要素を追加します。
<?xml version="1.0" encoding="UTF-8&quo>t; stan<dalone="yes"?
JSONToXML async="false" continueOnError>="fals<e" ena>bled="true<" name=>"JSONT<oXML"<>/span>
D<isplayN>ameCheck-JSONTo<XML/Displ>ayNa<me
> Properties/
< Options
> < NullValueNULL/Nu>llValue
< NamespaceBlockNam>e#namesp<aces/NamespaceBlockName
> De<faultNamespaceNode>N<ame$default/Default>NamespaceNodeNa<me
> <NamespaceSepa>rator:/Namespac<eSeparator
> < TextNodeName#text/>TextNodeName
< Att>r<ibuteBlockName#a>ttrs/AttributeB<lockName
>A<ttributePrefix@/Attribut>ePrefix
< InvalidCharsRe>plac<ement_/InvalidCharsRep>lacement
< ObjectRootEl>ement<NameRoot/ObjectRootEl>ementName
< ArrayRootEl>emen<tNameArray/ArrayRootE>lementName
< > Array<ItemElementNam>eItem/Ar<rayItemElementN>ame
< /Op>tions
< O>utputVa<riableresp>onse/OutputVariable
SourcePostalCode/Source
/JSONToXML
InCompatibleTypes
エラーコード
steps.json2xml.InCompatibleTypes
エラー レスポンスの本文
{ "fault": { "faultstring" : "JSONToXML[policy_name]: String can not be assigned to message type.", "detail": { "errorcode": "steps.json2xml.InCompatibleTypes" } } }
エラーの例
{
"fault": {
"faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type.",
"detail": {
"errorcode": "steps.json2xml.InCompatibleTypes"
}
}
}
原因
このエラーは、<Source> 要素で定義された変数の型と、<OutputVariable> 要素で定義された変数の型が異なる場合に発生します。<Source> 要素に入っている変数の型と、<OutputVariable> 要素に入っている変数の型は、一致させる必要があります。
有効な型は message と string です。
診断
エラーが発生した JSON to XML ポリシーを特定します。これは、エラー レスポンスの
faultstring要素にあります。たとえば、以下のfaultstringでは、ポリシー名はJSONToXML_checktypeです。"faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."エラーの発生した JSON to XML ポリシーの
<OutputVariable>と<Source>で指定された値をメモします。たとえば、次のポリシーで考えてみます。
<?xml version="1.0" encoding="UTF-8&quo>t; st<andalone="yes"? JSONToXML async="false" continueOnError="fal>se" <enabled=&qu>ot;true" name=<"JSONTo>XML_check<type"<>/span> D<isplayN>ameJSONToXML_<checktype>/Dis<playName > Proper<ties/ Opti>ons < NullValueNULL/>NullValue < NamespaceBlockN>ame#name<spaces/NamespaceBlockName> <DefaultNamespaceNo>d<eName$default/Defau>ltNamespaceNo<deName > < NamespaceSe>parator:/Name<spaceSeparator > < TextNodeName#tex>t/TextNodeNam<e A>t<tributeBlockName>#attrs/Attrib<uteBlockName > < AttributePrefix@/Attrib>utePrefix < InvalidChars>Repl<acement_/InvalidCharsR>eplacement < ObjectRoot>Eleme<ntNameRoot/ObjectRoot>ElementName < ArrayRoot>Elem<entNameArray/ArrayRoo>tElementN<ame > A<rrayItemElemen>tNameIte<m/ArrayItemElem>entName < > /Options < > Outp<utVariable>response/OutputVariable SourcePostalCode/Source /JSONToXML<Source>要素と<OutputVariable>要素で指定された変数の型を特定します。- API プロキシで、それぞれの変数が最初に定義されたコードを見つけます。
- その変数が最初に定義、設定されるポリシーを特定したら、次のように変数の型を特定する必要があります。
- type 属性の値を確認します(もしあれば)。
- type 属性がない場合、変数は文字列とみなされます。
<Source>で定義された変数の型が文字列で、<OutputVariable>の型が message の場合、あるいはその逆になっている場合、それがエラーの原因です。一般的な変数とその型については、変数リファレンスをご覧ください。
たとえば、下のように、変数
PostalCodeに値を割り当てるために使われる Assign Message ポリシーを考えます。<?xml version="1.0" encoding="UTF-8&quo>t; st<andalone="yes"? AssignMessage async="false" continueOnError="f>alse"<; enabled=&>quot;true" n<ame="As>sign_Post<alCode">; < DisplayNameAs>sign_PostalCo<de/D>isplayName< > Propertie<s/ > AssignVaria<ble > Nam<ePos>talCode/N<ame > Value{&q<uot;value":"560>08&q<uot;}/Value Re>f/ < /AssignVariable IgnoreUnresolvedVariablestrue/Ign>oreUn<resolvedVariab>lesAssignTo createNew="false" transport="http" type="request"/ /AssignMessage<AssignVariable>に設定された変数の型は文字列です。したがって、変数PostalCodeは文字列型です。ここで、
PostalCode変数は、下のように JSONToXML ポリシーの<Source>要素で使われていることを思い出してください。<Source>PostalCode</Source>同じように、
response変数は、下のように JSONToXML ポリシーの<OutputVariable>要素で使われていることを思い出してください。<OutputVariable>response</OutputVariable>PostalCodeが文字列型であるのに対して、response変数は message 型であるため、これらの型には互換性がなく、次のエラーが発生します。steps.json2xml.InCompatibleTypes上のエラーは、
<Source>要素の変数がmessage型であるのに、<OutputVariable>要素の変数が文字列型である場合にも発生します。
解決策
<Source> 要素と <OutputVariable> 要素では、必ず同じ型の変数を定義するようにします。<Source> 要素に入っている変数の型と、<OutputVariable> 要素に入っている変数の型は、一致させる必要があります。つまり、<Source> 要素と <OutputVariable> 要素の型を、どちらも文字列型か message 型かにします。
上記の JSON to XML ポリシーを修正するには、Assign Message ポリシーを使って文字列型の別の変数 PostalCode_output を宣言し、JSON to XML ポリシーの <OutputVariable> 要素ではこの変数を使うようにします。
Assign Message ポリシーは、次のように修正します。
<?xml version="1.0" encoding="UTF-8&quo>t; st<andalone="yes"?
AssignMessage async="false" continueOnError="f>alse"<; enabled=&>quot;true" n<ame="As>sign_Post<alCode">;
< DisplayNameAs>sign_PostalCo<de/D>isplayName<
> Propertie<s/
> AssignVaria<ble
> Nam<ePos>talCode/N<ame
> Value{&q<uot;value">;:"56008<&quo>t;}/Value
< >Ref/
</Ass>ignVariab<le
Assi>gnVariabl<e
NamePostalC>ode_<output/Name
Re>f/
< /AssignVariable
IgnoreUnresolvedVariablestrue/Ign>oreUn<resolvedVariab>les
AssignTo createNew="false" transport="http" type="request"/
/AssignMessage
JSONToXML ポリシーは、次のように修正します。
<?xml version="1.0" encoding="UTF-8&quo>t; st<andalone="yes"?
JSONToXML async="false" continueOnError>="fa<lse" e>nabled="true&q<uot; name=&q>uot;JSONT<oXML"<>/span>
D<isplayN>ameJSONToXML_<checktype>/Dis<playName
> Proper<ties/
Opti>ons
< NullValueNULL/>NullValue
< NamespaceBlockN>ame#name<spaces/NamespaceBlockName>
<DefaultNamespaceNo>d<eName$default/Defau>ltNamespaceNo<deName
> < NamespaceSe>parator:/Name<spaceSeparator
> < TextNodeName#tex>t/TextNodeNam<e
A>t<tributeBlockName>#attrs/Attrib<uteBlockName
> < AttributePrefix@/Attrib>utePrefix
< InvalidChars>Repl<acement_/InvalidCharsR>eplacement
< ObjectRoot>Eleme<ntNameRoot/ObjectRoot>ElementName
< ArrayRoot>Elem<entNameArray/ArrayRoo>tElementN<ame
> A<rrayItemElemen>tNameItem/ArrayIt<emElementName
> /O<ptions>
O<utputVa>riabl<ePostalCod>e_output/OutputVariable
SourcePostalCode/Source
/JSONToXML
InvalidSourceType
エラーコード
steps.json2xml.InvalidSourceType
エラー レスポンスの本文
{ "fault": { "faultstring"; : "JSONToXML[class invalid_class]: Invalid source type class invalid_class. Valid source types are [message, string].", "detail": { "errorcode": "steps.json2xml.InvalidSourceType" } } }
エラーの例
{
"fault": {
"faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string].",
"detail": {
"errorcode": "steps.json2xml.InvalidSourceType"
}
}
}
原因
このエラーは、<Source> 要素の定義に使用される変数の型が無効な場合に発生します。変数の有効な型は、message と string です。
診断
JSON to XML ポリシーで使用されている無効なソースタイプを特定します。この情報はエラー メッセージにあります。たとえば、次のエラーでは、無効な型は Integer です。
"faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message,string]."エラーの発生した API プロキシのすべての JSON to XML ポリシーを調べます。エラーの発生した JSON to XML ポリシーで、
<Source>で指定された変数の名前をメモします。次のサンプル ポリシーでは、
<Source>要素で EmployeeID という名前の変数が指定されています。
<?xml version="1.0" encoding="UTF-8&quo>t; st<andalone="yes"?
JSONToXML async="false" continueOnError>="fa<lse" e>nabled="tru<e" name>="JS<ONToXML&quo>t;
< Displ>ayNameCheck_S<ourceType>/Dis<playName
> Proper<ties/
Opti>ons
< NullValueNULL/>NullValue
< NamespaceBlockN>ame#name<spaces/NamespaceBlockName>
<DefaultNamespaceNo>d<eName$default/Defau>ltNamespaceNo<deName
> < NamespaceSe>parator:/Name<spaceSeparator
> < TextNodeName#tex>t/TextNodeNam<e
A>t<tributeBlockName>#attrs/Attrib<uteBlockName
> < AttributePrefix@/Attrib>utePrefix
< InvalidChars>Repl<acement_/InvalidCharsR>eplacement
< ObjectRoot>Eleme<ntNameRoot/ObjectRoot>ElementName
< ArrayRoot>Elem<entNameArray/ArrayRoo>tElementN<ame
> A<rrayItemElemen>tNameIt<em/ArrayItemEle>mentName
< > /Options<
> Out<putVariabl>erequest/OutputVariable
SourceEmployeeID/Source
/JSONToXML
<Source>要素で指定された変数の型を特定します。- API プロキシのコード内で、最初にこの変数が定義された場所を見つけます。
- その変数が最初に定義、設定されるポリシーを特定したら、次のように変数の型を特定する必要があります。
- type 属性の値を確認します(もしあれば)。
- type 属性がない場合、変数は文字列とみなされます。
<Source>で定義された変数の型が message 形でも文字列型でもない場合、これがエラーの原因です。一般的な変数とその型については、変数リファレンスをご覧ください。
たとえば、下のように、ExtractVariables ポリシーを使って、JSON ペイロードから値を抽出し、整数型の変数
EmployeeIDにその値を設定することを考えてみてください。<?xml version="1.0" encoding="UTF-8&quo>t; st<andalone="yes"? ExtractVariabl>es name=&<quot;E>xtractJ<SONVari>ables&quo<t; >Sourcerequest</Source JSONPayload V>ariable name=&quo<t;Employ>eeID<" ty>pe="inte<ger"> < JSON>Path$<.ID/JSONPath >/Variable /JSONPayload /ExtractVariablesここで、
EmployeeID変数は、下のように JSONToXML ポリシーの<Source>要素で使われていることを思い出してください。<Source>EmployeeID</Source>変数の型が
Integerと、有効な<Source>型でないため、API プロキシは次のエラーとなります。steps.json2xml.InvalidSourceType
解決策
<Source> 要素の指定には、必ず有効な型の変数を使うようにします。有効な <Source> の型は、message と string です。
JSONToXML ポリシーで上記のエラーを避けるには、message 型の request 変数を使うか、他の有効な JSON ペイロードの文字列を使います。