SOAPMessageValidation 政策部署错误问题排查

您正在查看 ApigeeApigee Hybrid 文档。
查看 Apigee Edge 文档。

InvalidResourceType

错误消息

通过 Apigee 界面或 API 部署 API 代理失败并显示以下错误消息:

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

错误消息

通过 Apigee 界面或 API 部署 API 代理失败并显示以下错误消息:

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

错误消息

通过 Apigee 界面或 API 保存 API 代理失败并显示以下错误消息:

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.

错误屏幕截图示例

未指定 RootElement 名称错误消息。

原因

如果 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

错误消息

通过 Apigee 界面或 API 保存 API 代理失败并显示以下错误消息:

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.

错误屏幕截图示例

RootElement 名称 1GetPriceResponse 是无效的错误消息。

原因

如果 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

错误消息

通过 Apigee 界面或 API 部署 API 代理失败并显示以下错误消息:

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>