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

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

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, 發生上述錯誤,部署作業就會失敗。

解析度

請確認 <ResourceURL>SOAPMessageValidation 政策元素中指定的資源類型已設為 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 指向無效的網址,因此部署作業會 失敗,並遵循上方顯示的錯誤。

解析度

請確認<ResourceURL> SOAPMessageValidation 政策沒有任何問題而無法編譯。

如要修正上述 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 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 Management 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.

錯誤螢幕截圖

原因

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

診斷

  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>