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>
...