現在、Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントに移動。 情報
SourceMessageNotAvailable
エラーコード
steps.messagevalidation.SourceMessageNotAvailable
エラー レスポンスの本文
{ "fault": { "faultstring": "source_var_name message is not available for[policy_name]", "detail": { "Errorcode": "steps.messagevalidation.SourceMessageNotAvailable" } } }
エラー レスポンスの本文の例
{
"fault": {
"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1",
"detail": {
"errorcode": "steps.messagevalidation.SourceMessageNotAvailable"
}
}
}
原因
このエラーは、SOAPMessageValidation ポリシーの <Source>
要素で指定された message 変数が、次のいずれかである場合に発生します。
- 範囲外(ポリシーが実行されている特定のフローで使用できない)
- 解決できない(定義されていない)
たとえば、SOAPMessageValidation ポリシーの <Source>
要素が、ポリシーが実行されるフローに存在しない変数に設定されている場合に、このエラーが発生します。
診断
エラーが発生した SOAPMessageValidation ポリシーの名前と
source
変数の名前を障害文字列から特定します。たとえば、次の障害文字列では、SOAPMessageValidation ポリシーの名前はSOAP-Message-Validation-1
、source
変数はrequest
です。"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1"
失敗した SOAPMessageValidation ポリシーの XML で、
<Source>
要素に設定された変数名が、障害文字列内で特定された変数名(上記のステップ 1)に一致していることを確認します。たとえば、次の SOAPMessageValidation ポリシーでは、
<Source>
要素内のrequest
という名前の変数を指定しています、これは、障害文字列の内容と一致します。<MessageValidation async="false" continueOnError="false" enabled="true" name="SOAP-Message-Validation-1"> <DisplayName>SOAP Message Validation-1</DisplayName> <Properties/> <Element namespace="http://schemas.xmlsoap.org/soap/prices">GetPriceResponse</Element> <SOAPMessage/> <Source>request</Source> <ResourceURL>xsd://Script-1.xsd</ResourceURL> </MessageValidation>
<Source>
要素で使用される変数が定義されていて、SOAPMessageValidation ポリシーが実行されるフローで使用できることを確認します。変数が次のいずれかの状態になっていないか確認します。
- 範囲外(ポリシーが実行されている特定のフローで使用できない)
- 解決できない(定義されていない)
該当する場合は、それがエラーの原因です。
例として、上記の SOAPMessageValidation ポリシーがレスポンス フローで実行されるとします。ただし、上記の
<Source>
要素の例で使用されているrequest
変数は、リクエスト フローでのみ使用できます。request
変数はレスポンス フローに存在しないため、次のエラーを受け取ります。"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1"
解決策
失敗した SOAPMessageValidation ポリシーの <Source>
要素内に設定された変数が定義されていて、ポリシーが実行されるフローに存在することを確認します。
上記の例を修正するには、レスポンス フローにある response
変数を使用するように <Source
> 要素を変更します。
<MessageValidation async="false" continueOnError="false" enabled="true" name="SOAP-Message-Validation-1">
<DisplayName>SOAP Message Validation-1</DisplayName>
<Properties/>
<Element namespace="http://schemas.xmlsoap.org/soap/prices">GetPriceResponse</Element>
<SOAPMessage/>
<Source>response</Source>
<ResourceURL>xsd://Script-1.xsd</ResourceURL>
</MessageValidation>
NonMessageVariable
エラーコード
steps.messagevalidation.NonMessageVariable
エラー レスポンスの本文
{ "fault": { "faultstring": "Variable var_name does not resolve to a Message" "detail": { "errorcode": "steps.messagevalidation.NonMessageVariable" } } }
エラー レスポンスの本文の例
{
"fault": {
"faultstring": "Variable message.content does not resolve to a Message",
"detail": {
"errorcode": "steps.messagevalidation.NonMessageVariable"
}
}
}
原因
このエラーは、SOAPMessageValidation ポリシーの <Source>
要素が Message 型以外の変数に設定されている場合に発生します。
Message 型の変数は、HTTP リクエストとレスポンス全体を表します。組み込みの Apigee Edge フロー変数 request
、response
、message
はメッセージ型です。メッセージ変数の詳細については、変数リファレンスをご覧ください。
診断
障害文字列からメッセージ型に解決されない変数の名前を特定します。たとえば、次の障害文字列の変数の名前は
message.content
です。"faultstring": "Variable message.content does not resolve to a Message"
エラーが発生した特定の API プロキシで、すべての SOAPMessageValidation ポリシーを調べます。SOAPMessageValidation ポリシーは複数ある場合があります。
<Source>
要素で指定された変数が障害文字列で特定された変数名(上記のステップ 1)と一致している、特定の SOAPMessageValidation ポリシーを特定します。たとえば、次のポリシーにより、
<Source>
要素がmessage.content
という名前の変数に設定されます。これは、障害文字列の内容と一致します。<MessageValidation async="false" continueOnError="false" enabled="true" name="SOAP-Message-Validation-1"> <DisplayName>SOAP Message Validation-1</DisplayName> <Properties/> <Element namespace="http://schemas.xmlsoap.org/soap/prices">GetPriceResponse</Element> <SOAPMessage/> <Source>message.content</Source> <ResourceURL>xsd://Script-1.xsd</ResourceURL> </MessageValidation>
変数
message.content
は Message 型ではないため、次のエラーが発生します。"faultstring": "Variable message.content does not resolve to a Message"
解決策
失敗した SOAPMessageValidation ポリシーの <Source>
要素が、ポリシーが実行されるフローに存在する Message 型の変数に設定されていることを確認します。
ポリシーを修正するには、Message 型の変数を指定するように <Source>
要素を変更します。たとえば、失敗した SOAPMessageValidation ポリシーでは、<Source>
要素を request
と指定できます。
<MessageValidation async="false" continueOnError="false" enabled="true" name="SOAP-Message-Validation-1">
<DisplayName>SOAP Message Validation-1</DisplayName>
<Properties/>
<Element namespace="http://sample.com"> sampleObject</Element>
<SOAPMessage/>
<Source>request</Source>
<ResourceURL>xsd://Script-1.xsd</ResourceURL>
</MessageValidation>
失敗
エラーコード
steps.messagevalidation.Failed
エラー レスポンスの本文
{ "fault": { "faultstring": "Variable var_name failed with reason: \"reason [Line varline_num "detail": { "errorcode": "steps.messagevalidation.Failed" } } }
エラー レスポンスの本文の例
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
原因
このエラーは、SOAPMessageValidation ポリシーが、XSD スキーマまたは WSDL 定義に対する入力メッセージ ペイロードを検証できなかった場合に発生します。また、ペイロード メッセージ内の JSON または XML の形式が正しくない場合にも発生します。
このエラーの原因として、以下が考えられます。
原因 | 説明 |
XML ペイロードの不一致 | 入力 XML ペイロードが、SoapMessageValidation ポリシーで指定された XSD スキーマに準拠していません。 |
SOAP ペイロードの不一致 | 入力 SOAP ペイロードが、SoapMessageValidation ポリシーで指定された WSDL 定義に準拠していません。 |
JSON または XML が正しくない | 入力 SOAP ペイロードに、適切な形式の XML または JSON が含まれていません。 |
原因: XML ペイロードの不一致
このエラーは、入力 XML ペイロードが SoapMessageValidation ポリシーの <ResourceURL>
要素で指定された XSD スキーマに準拠していない場合に発生します。
エラー メッセージの例
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
診断
SOAPMessageValidation ポリシー名、失敗の理由、XSD スキーマと一致しない XML ペイロードの行番号を特定します。この情報はすべて障害文字列に含まれます。たとえば、次の障害文字列では、SOAPMessageValidation ポリシーの名前は
SOAP-Message-Validation-1,
、失敗の理由はExpecting a child element but found none [Line 9]
、行番号は9
です。"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\""
SOAPMessageValidation ポリシーを調べて、XSD スキーマ定義ファイルを使用してメッセージを検証することを確認します。たとえば、次の SOAPMessageValidation ポリシーでは、
<ResourceURL>
要素に XSD リソース ファイルが含まれています。<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <MessageValidation async="false" continueOnError="false" enabled="true" name="SOAP-Message-Validation-1"> <DisplayName>SOAP Message Validation-1</DisplayName> <Properties/> <SOAPMessage/> <Source>request</Source> <ResourceURL>xsd://Script-1.xsd</ResourceURL> </MessageValidation>
上記のステップ 1 で特定した行番号の入力ペイロードを確認し、問題の原因を特定します。
入力 XML ペイロードのサンプル
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <soap:Body> <shipOrder xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"> <shipTo> <name>Karl Kalckstein</name> </shipTo> <items> <item> <title>I love APIs</title> <quantity>1</quantity> <price>2.90</price> </item> </items> </shipOrder> </soap:Body> </soap:Envelope>
上記の例では、9 行目に
</shipTo>
終了タグがあります。SOAPMessageValidation ポリシーで使用される XML スキーマ定義ファイル
Script-1.xsd
を調べて、<shipTo>
要素がどのように表示されるかを確認します。... <xsd:element name="shipTo" type="shipAddress"/> ... <xsd:complexType name="shipAddress"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="street" type="xsd:string"/> <xsd:element name="address" type="xsd:string"/> <xsd:element name="country" type="xsd:string"/> </xsd:sequence> </xsd:complexType> ...
検証に使用されるサンプル XSD によると、
<shipTo>
要素に子要素<name>
、<street>
、<address>
、<country>
が必要です。しかし、入力 XML ペイロードには、子要素<name>
しかありません。結果として、次のエラーが発生します。"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\""
解決策
この検証エラーを解決する方法は 2 つあります。
ソリューション 1
XSD スキーマ定義が不要な制限を適用しており、<shipTo>
要素の下で <name>
子要素のみが必要であると判断した場合、SOAPMessageValidation ポリシーで使用される Script-1.xsd
を変更できます。上記のペイロードの例を検証するには、次のように XSD ファイルを変更します。
...
<xsd:element name="shipTo" type="shipAddress"/>
...
<xsd:complexType name="shipAddress">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
ソリューション 2
XSD 定義ファイルが正しい場合は、入力 XML ペイロードを xsd
と一致するように変更できます。たとえば、xsd
に準拠するようにペイロードを次のように変更できます。
<?xml version="1.0">
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
<shipOrder xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
<shipTo>
<name>Karl Kalckstein</name>
<street>1020 Parkway</street>
<address>Mountain View, CA 94043</address>
<country>USA</country>
</shipTo>
<items>
<item>
<title>I love APIs</title>
<quantity>1</quantity>
<price>2.90</price>
</item>
</items>
</shipOrder>
</soap:Body>
</soap:Envelope>
原因: SOAP ペイロードの不一致
このエラーは、入力 SOAP ペイロードが SoapMessageValidation ポリシーの <ResourceURL>
要素で指定された WSDL 定義に準拠していない場合に発生します。
エラー メッセージの例
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
診断
SOAPMessageValidation ポリシー名、失敗の理由、WSDL 定義と一致しない SOAP ペイロードの行番号を特定します。この情報はすべて障害文字列から確認できます。たとえば、次の障害文字列では、SOAPMessageValidation ポリシーの名前は
SOAP-Message-Validation-1
、失敗の理由は\"Element name mismatch. Wildcard? [Line 11]\""
、行番号は11
です。"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\""
SOAPMessageValidation ポリシーを調べて、
wsdl
スキーマを使用してメッセージを検証することを確認します。たとえば、次の SOAPMessageValidation ポリシーでは、<ResourceURL>
要素にwsdl
リソース ファイルが含まれています。<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <MessageValidation async="false" continueOnError="false" enabled="true" name="SOAP-Message-Validation-1"> <DisplayName>SOAP Message Validation-1</DisplayName> <Properties/> <SOAPMessage/> <Source>request</Source> <ResourceURL>wsdl://SOAP-Message-Validation-1.wsdl</ResourceURL> </MessageValidation>
ステップ 1 で特定した行番号の入力ペイロードを確認し、問題の原因を特定します。
入力 SOAP ペイロードの例
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <soap:Body> <shipOrder xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"> <shipTo> <name>Karl Kalckstein</name> <street>1020 Parkway</street> <address>Mountain View, CA 94043</address> <country>USA</country> </shipTo> <items> <item> <title>I love APIs</title> <quantity>1</quantity> <price>2.90</price> </item> </items>
上記の例では、11 行目の
<shipTo>
要素に子要素<country>
があります。SOAPMessageValidation ポリシーで使用される WSDL 定義ファイル
SOAP-Message-Validation-1.wsdl
を調べて、<shipTo>
要素の下の子要素<country>
の何が問題かを確認します。<?xml version="1.0" encoding="ISO-8859-1"?> <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:types> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="shipOrder" type="order"/> <xsd:complexType name="order"> <xsd:sequence> <xsd:element name="shipTo" type="shipAddress"/> <xsd:element name="items" type="cdItems"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="shipAddress"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="street" type="xsd:string"/> <xsd:element name="address" type="xsd:string"/> </xsd:sequence> ...
検証に使用される WSDL 定義によると、
<shipTo>
要素に<country>
子要素がありません。結果として、次のエラーが発生します。"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\""
解決策
この検証エラーを解決する方法は 2 つあります。
ソリューション 1
使用される WSDL 定義が間違っていると判断した場合、SOAPMessageValidation ポリシーで使用される SOAP-Message-Validation-1.wsdl
を変更できます。上記のペイロードの例を検証するには、次のようにファイルを変更します。
...
<xsd:complexType name="shipAddress">`
...
<sequence>
<element name="name" type="xsd:string"/>
<element name="street" type="xsd:string"/>
<element name="address" type="xsd:string"/>
<element name="country" type="xsd:string"/>
</sequence>
ソリューション 2
WSDL 定義が正しい場合は、入力 SOAP ペイロードを WSDL 定義と一致するように変更できます。
たとえば、入力 SOAP ペイロードを次のように変更できます。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
<shipOrder xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
<shipTo>
<name>Karl Kalckstein</name>
<street>1020 Parkway</street>
<address>Mountain View, CA 94043</address>
</shipTo>
<items>
<item>
<title>I love APIs</title>
<quantity>1</quantity>
<price>2.90</price>
</item>
</items>
原因: JSON または XML が正しくない
このエラーは、入力 SOAP ペイロードが SoapMessageValidation ポリシーの <ResourceURL>
要素で指定された WSDL 定義に準拠していない場合に発生します。
エラー メッセージの例
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expected <\/title> at line 15(possibly around char 420)\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
診断
SOAPMessageValidation ポリシー名、失敗の理由、WSDL 定義と一致しない XML ペイロードの行番号を特定します。この情報はすべて障害文字列から確認できます。たとえば、次の障害文字列では、SOAPMessageValidation ポリシーの名前は
SOAP-Message-Validation-1
、失敗の理由はExpected </title> at line 15(possibly around char 420):
、行番号は15.
です"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expected </title> at line 15(possibly around char 420)\""
上記のステップ 1 で特定した行番号の入力ペイロードを確認し、問題の原因を特定します。
入力 SOAP ペイロードの例
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <soap:Body> <shipOrder xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"> <shipTo> <name>Karl Kalckstein</name> <street>1020 Parkway</street> <address>Mountain View, CA 94043</address> <country>USA</country> </shipTo> <items> <item> <title>I love APIs</titles> <quantity>1</quantity> <price>2.90</price> </item> </items> </shipOrder> </soap:Body> </soap:Envelope>
上記の例では、入力 XML の 15 行目に要素
<title>
がありますが、</title>
終了タグを使って閉じられていません。
解決策
このエラーを解決するには、入力ペイロードが有効で、形式が正しいことを確認してください。
たとえば、次のように入力 XML ペイロードを変更できます。
...
</shipTo>
<items>
<item>
<title>I love APIs</title>
<quantity>1</quantity>
<price>2.90</price>
</item>
</items>
...