排解 SOAP 訊息驗證政策部署錯誤

您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件
info

InvalidResourceType

錯誤訊息

透過 Edge UI 或 Edge Management API 部署 API Proxy 會失敗,並顯示以下錯誤訊息:

Error Deploying Revision revision_number to environment
MessageValidation soap_message_validation_policy: Invalid Resource Type resource_type. It should be xsd or wsdl. Context Revision:revision_number;APIProxy:apiproxy_name;Organization:organization;Environment:environment.

錯誤訊息範例

Error Deploying Revision 1 to test
MessageValidation SOAP-Message-Validation-1: Invalid Resource Type py.
It should be xsd or wsdl. Context Revision:1;APIProxy:soapmessagevalidation;
Organization:gsc-hipaa;Environment:test.

錯誤螢幕截圖範例

原因

如果 SOAPMessageValidation 政策中的 <ResourceURL> 元素設為政策不支援的資源類型,就會發生這個錯誤。支援的資源類型為 xsdwsdl

診斷

  1. 請找出 SOAPMessageValidation 政策名稱,以及政策 <ResourceURL> 元素中使用的無效資源類型。您可以在錯誤訊息中找到這兩項項目。舉例來說,在以下錯誤中,SOAPMessageValidation 政策名稱為 SOAP-Message-Validation-1,資源類型為 py

    Error Deploying Revision 1 to test
    MessageValidation SOAP-Message-Validation-1: Invalid Resource Type py. It should
    be xsd or wsdl. Context Revision:1;APIProxy:soapmessagevalidation;Organization:gsc-
    hipaa;Environment:test.
    
  2. 檢查失敗的 SOAPMessageValidation 政策 XML。如果為 <ResourceURL> 元素指定的資源類型與上述步驟 1 中指出的無效資源類型相符,則表示這是錯誤的原因。

    舉例來說,下列政策會將資源類型指定為 py,這與錯誤訊息中的內容相符:

    <?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/>
        <Element namespace="http://sample.com"> sampleObject</Element>
        <SOAPMessage/>
        <Source>request</Source>
        <ResourceURL>py://Script-1.py</ResourceURL>
    </MessageValidation>
    

    由於 <ResourceURL> 中使用的資源類型不是 xsdwsdl,因此部署作業會失敗,並顯示上述錯誤。

解析度

請確認 SOAPMessageValidation 政策的 <ResourceURL> 元素中指定的資源類型已設為 xsdwsdl,且資源檔案使用正確的格式。

如要修正上述 SOAPMessageValidation 政策範例,您可以將資源類型修改為 xsdwsdl

<?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/>
    <Element namespace="http://sample.com"> sampleObject</Element>
    <SOAPMessage/>
    <Source>request</Source>
<ResourceURL>wsdl://SOAP-Message-Validation-1.wsdl</ResourceURL>
</MessageValidation>

ResourceCompileFailed

錯誤訊息

透過 Edge UI 或 Edge Management API 部署 API Proxy 會失敗,並顯示以下錯誤訊息:

Error Deploying Revision revision_number to environment
MessageValidation soap_message_validation_policy: Failed to compile resource resource. Context Revision:revision_number;APIProxy:apiproxy_name;Organization:organization;Environment:environment.

錯誤訊息範例

Error Deploying Revision 1 to test
MessageValidation SOAP-Message-Validation-1: Failed to compile resource SOAP-Message-Validation-1.wsdl. Context Revision:1;APIProxy:soapmessagevalidation;Organization:gsc-hipaa;Environment:test.

錯誤螢幕截圖範例

原因

如果 SOAPMessageValidation 政策的 <ResourceURL> 元素中參照的資源指令碼含有錯誤,導致無法在部署期間編譯,就會發生這個錯誤。

診斷

  1. 找出 SOAPMessageValidation 政策名稱和政策中使用的資源指令碼。你可以在錯誤訊息中找到這兩項資訊。舉例來說,在以下錯誤中,SOAPMessageValidation 政策名稱為 SOAP-Message-Validation-1,資源指令碼為 SOAP-Message-Validation-1.wsdl

    Error Deploying Revision 1 to test
    MessageValidation SOAP-Message-Validation-1: Failed to compile resource
    SOAP-Message-Validation-1.wsdl. Context
    Revision:1;APIProxy:soapmessagevalidation;Organization:gsc-hipaa;
    Environment:test.
    
  2. 檢查失敗的 SOAPMessageValidation 政策 XML,並確認為 <ResourceURL> 元素指定的資源指令碼與錯誤訊息中的一致。

    舉例來說,下列政策會將 <ResourceURL> 元素指定為 SOAP-Message-Validation-1.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/>
        <Element namespace="http://sample.com"> sampleObject</Element>
        <SOAPMessage/>
        <Source>request</Source>
        <ResourceURL>wsdl://SOAP-Message-Validation-1.wsdl</ResourceURL>
    </MessageValidation>
    
  3. 查看步驟 1 中指出的資源指令稿檔案,看看是否有任何可能導致編譯錯誤的問題。

    以下是資源指令碼檔案範例:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsd/">
        <wsdl:types>
            <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
                <xs:element name="request" type="xs:string"/>
            </xs:schema>
        </wsdl:types>
    </wsdl:definitions>
    

    由於 xmlns:wsdl 指向無效的網址,因此部署作業會失敗,並顯示上述錯誤。

解析度

請確認 SOAPMessageValidation 政策的 <ResourceURL> 元素中指定的資源指令碼沒有任何問題,不會導致編譯失敗。

如要修正上述 SOAP-Message-Validation-1.wsdl 指令碼,請修改 xmlns:wsdl,使其指向有效的網址:

<?xml version="1.0" encoding="ISO-8859-1"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <wsdl:types>
        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
            <xs:element name="request" type="xs:string"/>
        </xs:schema>
    </wsdl:types>
</wsdl:definitions>

RootElementNameUnspecified

錯誤訊息

透過 Edge UI 或 Edge Management API 儲存 API Proxy 會失敗,並顯示以下錯誤訊息:

Error Saving Revision revision_number
MessageValidation soap_message_validation_policy:
RootElement name is not specified.

錯誤訊息範例

Error Saving Revision 2
MessageValidation SOAP-Message-Validation-1: RootElement name is not specified.

錯誤螢幕截圖範例

原因

如果 SOAPMessageValidation 政策中的 <Element> 元素未包含根元素名稱,就會發生這項錯誤。

診斷

  1. 找出發生錯誤的 SOAPMessageValidation 政策名稱。例如,在下列錯誤中,SOAPMessageValidation 政策名稱為 SOAP-Message-Validation-1

    Error Saving Revision 2
    MessageValidation SOAP-Message-Validation-1: RootElement name is not specified.
    
  2. 檢查失敗的 SOAPMessageValidation 政策 XML。如果 <Element> 元素中未指定用於驗證的根元素名稱,這就是發生錯誤的原因。

    舉例來說,下列政策未指定根元素名稱:

    <?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/>
        <Element namespace="http://schemas.xmlsoap.org/soap/prices"/>
        <SOAPMessage/>
        <Source>request</Source>
        <ResourceURL>xsd://Script-1.xsd</ResourceURL>
    </MessageValidation>
    

    由於未指定根元素名稱,因此部署作業會失敗,並顯示上述錯誤。

解析度

請確認 SOAPMessageValidation 政策的 <Element> 元素包含正確的根元素。

如要修正上述的 SOAPMessageValidation 政策,您可以修改 <Element> 並新增有效的根元素,如下所示:

<?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/>
    <Element namespace="http://schemas.xmlsoap.org/soap/prices">GetPriceResponse</Element>
    <SOAPMessage/>
    <Source>request</Source>
    <ResourceURL>xsd://Script-1.xsd</ResourceURL>
</MessageValidation>

InvalidRootElementName

錯誤訊息

透過 Edge UI 或 Edge Management API 儲存 API Proxy 會失敗,並顯示以下錯誤訊息:

Error Saving Revision revision_number
MessageValidation soap_message_validation_policy: RootElement name root_element_name is invalid.

錯誤訊息範例

Error Saving Revision 2
MessageValidation SOAP-Message-Validation-1: RootElement name 1GetPriceResponse
is invalid.

錯誤螢幕截圖範例

原因

如果 SOAPMessageValidation 政策中的 <Element> 元素包含根元素名稱不符合有效元素命名的 XML 規則,就會發生這個錯誤。

診斷

  1. 找出發生錯誤的 SOAPMessageValidation 政策名稱。例如,在以下錯誤中,SOAPMessageValidation 政策名稱為 SOAP-Message-Validation-1

    Error Saving Revision 2
    MessageValidation SOAP-Message-Validation-1: RootElement name 1GetPriceResponse
    is invalid.
    
  2. 檢查失敗的 SOAPMessageValidation 政策 XML。如果 <Element> 元素中指定的根元素名稱不符合有效 XML 元素名稱的條件,就會導致錯誤。

    舉例來說,下列政策的根元素名稱開頭為數字,因此無效。元素名稱如果包含空格,也會無效。

    <?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/>
         <Element namespace="http://schemas.xmlsoap.org/soap/prices">1GetPriceResponse</Element>
        <SOAPMessage/>
        <Source>request</Source>
        <ResourceURL>xsd://Script-1.xsd</ResourceURL>
    </MessageValidation>
    

解析度

確認 SOAPMessageValidation 政策的 <Element> 元素包含有效的根元素名稱。

如要修正上述的 SOAPMessageValidation 政策,您可以修改 <Element> 元素,讓其包含有效的根元素名稱,如下所示:

<?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/>
    <Element namespace="http://schemas.xmlsoap.org/soap/prices">GetPriceResponse</Element>
    <SOAPMessage/>
    <Source>request</Source>
    <ResourceURL>xsd://Script-1.xsd</ResourceURL>
</MessageValidation>

NoElements

錯誤訊息

透過 Edge UI 或 Edge 管理 API 部署 API proxy 失敗,並顯示以下錯誤訊息:

Error Deploying Revision revision_number
Resource "resource_url" has no element definitions.

錯誤訊息範例

Error Deploying Revision 2 to test
Resource "xsd://Script-1.xsd" has no element definitions.

錯誤螢幕截圖範例

原因

如果 SOAPMessageValidation 政策的 <Resource> 元素中指定的資源檔案不含任何可用於驗證的元素,就會發生這個錯誤。

診斷

  1. 從錯誤訊息中找出缺少元素定義的資源檔案。舉例來說,在以下錯誤中,所用資源檔案為 xsd://Script-1.xsd

    Error Deploying Revision 2 to test
    Resource "xsd://Script-1.xsd" has no element definitions.
    
  2. 檢查步驟 1 中指出的資源檔案。如果未定義任何元素,則是錯誤的原因。

    舉例來說,下列資源檔案 Script-1.xsd 不含任何元素:

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    </xsd:schema>
    

    由於資源檔案沒有任何元素,部署作業將會失敗並顯示上述錯誤。

解析度

確保 SOAPMessageValidation 政策中使用的資源檔案含有相關的元素定義。

如要修正上述範例資源檔案,請修改 xsd 檔案,加入下列內容:

<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:element name="country" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="cdItems">
<xsd:sequence>
<xsd:element name="item" type="cdItem" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="cdItem">
<xsd:sequence>
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="quantity" type="xsd:integer"/>
<xsd:element name="price" type="xsd:decimal"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>