您正在查看 Apigee 和 Apigee Hybrid 文档。
查看 Apigee Edge 文档。
XSLSourceMessageNotAvailable
错误代码
steps.xsl.XSLSourceMessageNotAvailable
错误响应正文
{ "fault": { "faultstring": "response message is not available for XSL: policy_name", "detail": { "errorcode": "steps.xsl.XSLSourceMessageNotAvailable" } } }
错误消息示例
{
"fault": {
"faultstring": "response message is not available for XSL: xslt",
"detail": {
"errorcode": "steps.xsl.XSLSourceMessageNotAvailable"
}
}
}
原因
如果 XSLTransform 政策的 <Source>
元素中指定的 message
或字符串变量为以下任意一项,就会出现此错误:
- 超出范围(在执行政策的特定流中不可用)
- 无法解析(未定义)
例如,如果应在请求流中执行 XSLTransform 政策,但将 <Source>
元素设置为响应变量,而响应流中并不存在该变量,那么就会出现此错误。
诊断
确定发生错误的 APEXTransform 政策以及不可用的变量名称。您可以在错误响应的
faultstring
元素中找到这两项。例如,在以下faultstring
中,政策名称为xslt
,变量为response
:faultstring": "response message is not available for XSL: xslt
在失败的 XSLTransform 政策 XML 中,验证在
<Source>
元素中设置的变量的名称是否与故障字符串中标识(上述第 1 步)的变量名称相匹配。例如,以下 XSLTransform 政策在<Source>
元素中指定了一个名为response
的变量,该变量与故障字符串中的内容匹配:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <XSL async="false" continueOnError="false" enabled="true" name="xslt"> <DisplayName>xslt</DisplayName> <Properties/> <ResourceURL>xsl://XSL-Transform.xsl</ResourceURL> <Source>response</Source> <Parameters ignoreUnresolvedVariables="false"/> <OutputVariable/> </XSL>
确定
<Source>
元素中使用的变量是否已定义,以及在执行 XSLTransform 政策的流中是否可用。如果该变量:
- 超出范围(在执行政策的特定流中不可用)
- 无法解析(未定义)
就会导致错误。
例如,假设上面所示的 XSLTransform 政策应在请求流中执行。请注意,
response
变量用于政策示例的<Source>
元素中。response
变量仅在响应流中可用。由于请求流中不存在
response
变量,因此会收到错误代码:steps.xsl.XSLSourceMessageNotAvailable
解决方法
确保在执行政策的流中定义且存在在失败的 XSLTransform 政策的 <Source>
元素中设置的变量。
如需更正上面所示的 XSLTransform 政策示例,您可以修改 <Source>
元素以使用 request
变量,因为它存在于请求流中:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<XSL async="false" continueOnError="false" enabled="true" name="xslt">
<DisplayName>xslt</DisplayName>
<Properties/>
<ResourceURL>xsl://XSL-Transform.xsl</ResourceURL>
<Source>request</Source>
<Parameters ignoreUnresolvedVariables="false"/>
<OutputVariable/>
</XSL>
XSLEvaluationFailed
错误代码
steps.xsl.XSLEvaluationFailed
错误响应正文
{
"fault": {
"faultstring": "Evaluation of XSL <var>XSL_file_name</var> failed with reason: \"<var>reason_for_failure</var>",
"detail": {
"errorcode": "steps.xsl.XSLEvaluationFailed"
}
}
}
错误消息示例
{
"fault": {
"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly around char 0)\"",
"detail": {
"errorcode": "steps.xsl.XSLEvaluationFailed"
}
}
}
可能的原因
在以下情况下,会发生此错误:
- 输入 XML 载荷不可用/格式不正确。
- XSLTransform 政策失败/无法根据 XSL 文件中提供的转换规则转换输入 XML 文件。很多不同的原因可能会导致 XSLTransform 政策失败。错误消息中的失败原因提供了有关原因的更多信息。下表列出了此故障的其中一个原因,即前缀无效,这是举例说明。
原因 | 说明 |
---|---|
输入 XML 载荷不可用 | 输入 XML 载荷未传递或为空。 |
输入 XML 格式不正确 | 输入 XML 载荷格式不正确或无效。 |
前缀无效 | 输入 XML 载荷的前缀未在 XSL 文件中定义。 |
原因:输入 XML 载荷不可用
如果未传递输入 XML 载荷,或者将 XML 载荷作为 API 请求的一部分传递到 XSLTransform 政策为空的 API 代理,则会发生此错误。
错误消息示例
{
"fault": {
"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly around char 0)\"",
"detail": {
"errorcode": "steps.xsl.XSLEvaluationFailed"
}
}
}
诊断
标识 XML Transform 政策无法评估的 XSL 文件以及失败原因。如果输入 XML 载荷未传递或为空,则失败原因指明在解析时提前结束文档。您可以在错误响应的
faultstring
元素中找到所有这些信息。例如,在以下faultstring
中,XSL 文件是XSL-Transform.xsl
,失败原因是Premature end of document while parsing at line 1 (possibly around char 0)
。此错误表示 XML 载荷未传递或为空。"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly around char 0)\""
确定作为请求的一部分传递的输入 XML 载荷是否为空。如果输入载荷未传递或为空,则会导致错误。
在以下请求示例中,用户发送的请求载荷(即请求正文)为空。
例如:
curl -v "http://your_host_alias/v1/xsltransform" -H "Content-Type: application/xml"
其中 your_host_alias 是用于访问您的 API 的公共域名,如替换文件中的
virtualhosts.hostAliases
属性中所配置。 请参阅指定配置替换。由于 XML 输入载荷为空,您收到以下错误:
"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly around char 0)\""
解决方法
确保传递给 XSLTransform 政策的输入是有效的 XML 载荷且非空。
如需修复 XSLTransform 政策示例的问题,请传递有效的 XML 载荷。例如:
创建名为
city.xml
且包含以下内容的文件:<?xml version="1.0" encoding="UTF-8"?> <root> <City>Bengaluru</City> <Name>Apigee</Name> <Pincode>560016</Pincode> </root>
使用 curl 命令进行 API 调用,如下所示:
curl -v "http://your_host_alias/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
其中 your_host_alias 是用于访问您的 API 的公共域名,如替换文件中的
virtualhosts.hostAliases
属性中所配置。 请参阅指定配置替换。
原因:输入 XML 格式不正确
作为 API 请求的一部分传递给 XSLTransform 政策的输入 XML 载荷格式不正确或无效。
错误消息示例
{
"fault": {
"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('<') character\"",
"detail": {
"errorcode": "steps.xsl.XSLEvaluationFailed"
}
}
}
诊断
标识 XML Transform 政策无法评估的 XSL 文件以及失败原因。如果输入 XML 载荷格式不正确,则失败原因指明存在意外字符。您可以在错误响应的
faultstring
元素中找到所有这些信息。例如,在以下faultstring
中,XSL 文件是XSL-Transform.xsl
,失败原因是Unexpected char while looking for open tag ('<') character
。也就是说,XML 载荷中缺少“<
”。"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('<') character\""
检查传递给 XSLTransform 政策的输入 XML 载荷,并查看它是否具有有效的 XML 内容。如果输入载荷不是有效的 XML,则会导致错误。
在以下请求示例中,用户发送的输入载荷(即请求正文)无效。
例如:
curl -v "http://your_host_alias/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
其中 your_host_alias 是用于访问您的 API 的公共域名,如替换文件中的
virtualhosts.hostAliases
属性中所配置。 请参阅指定配置替换。在此示例中,
city.xml
的定义如下:{ "City": "Bengaluru", "Name": "Apigee", "Pincode": "560016" }
由于输入载荷是 JSON,而不是有效的 XML,您收到以下错误:
"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('<') character\""
解决方法
确保传递给 XSLTransform 政策的输入是有效的 XML 载荷且非空。
如需修复 XSLTransform 政策示例的问题,请传递有效的 XML 载荷。例如:
修改文件
city.xml
以在 XML 中添加内容,如下所示:<?xml version="1.0" encoding="UTF-8"?> <root> <City>Bengaluru</City> <Name>Apigee</Name> <Pincode>560016</Pincode> </root>
使用 curl 命令进行 API 调用,如下所示:
curl -v "http://your_host_alias/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
其中 your_host_alias 是用于访问您的 API 的公共域名,如替换文件中的
virtualhosts.hostAliases
属性中所配置。 请参阅指定配置替换。
原因:前缀无效
传递给 XSLTransform 政策的输入 XML 载荷中的某个元素未定义为在政策中指定的 XSL 文件中的前缀。
错误消息示例
{
"fault": {
"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly around char 270)\"",
"detail": {
"errorcode": "steps.xsl.XSLEvaluationFailed"
}
}
}
诊断
标识 XML Transform 政策无法评估的 XSL 文件以及失败原因。在这种情况下,失败原因指明输入 XML 载荷中特定行号存在未解析前缀。您可以在错误响应的
faultstring
元素中找到所有这些信息。例如,在以下faultstring
中,XSL 文件为XSL-Transform.xsl
,失败原因为Unresolved Prefix
,行号为1
。"faultstring":"Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly around char 270)\""
检查 XSL 文件的内容(在上述第 1 步中标识)和输入 XML 载荷。如果输入 XML 载荷的行号(在上述第 1 步中标识)中使用的前缀在 XSL 文件中不存在,则会导致错误。
下面是导致错误的 XSL 示例 和相应的 XML 载荷:
XSL-Transform.xsl <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="text"/> <xsl:variable name="newline"> <xsl:text> </xsl:text> </xsl:variable> <xsl:template match="/"> <xsl:text><Life></xsl:text> <xsl:value-of select="$newline"/> <xsl:text>Here are the odd-numbered items from the list:</xsl:text> <xsl:value-of select="$newline"/> <xsl:for-each select="list/listitem"> <xsl:if test="(position() mod 2) = 1"> <xsl:number format="1. "/> <xsl:value-of select="."/> <xsl:value-of select="$newline"/> </xsl:if> </xsl:for-each> <xsl:text></Life></xsl:text> </xsl:template> </xsl:stylesheet>
输入 XML 载荷
<?xml version="1.0"?> <Life:Books> <title>A few of my favorite albums</title> <listitem>Beat Crazy</listitem> <listitem>Here Come the Warm Jets</listitem> <listitem>Kind of Blue</listitem> <listitem>London Calling</listitem> </Life:Books>
上面所示的 XML 载荷示例包含
<Life:Books>
元素。请注意,XSL 没有此前缀。而是具有<xsl:text><Life></xsl:text>
前缀。因此,您会收到以下错误:"faultstring":"Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly around char 270)\""
解决方法
确保传递给 XSLTransform 政策的输入 XML 载荷已将所有元素格式定义为政策中使用的 XSL 文件中的前缀。
如需修复上面显示的 XML 文件示例,您可以按如下所示修改该文件:
更新的输入 XML 载荷
<?xml version="1.0"?>
<Life>
<title>A few of my favorite albums</title>
<listitem>Beat Crazy</listitem>
<listitem>Here Come the Warm Jets</listitem>
<listitem>Kind of Blue</listitem>
<listitem>London Calling</listitem>
</Life>