XSL 변환 정책 런타임 오류 문제 해결

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

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"
        }
    }
}

원인

이 오류는 XSL 변환 정책의 <Source> 요소에서 지정된 메시지 또는 문자열 변수가 다음 중 하나일 때 발생합니다.

  • 범위를 벗어난 경우(정책이 실행 중인 특정 흐름에서 사용할 수 없음)
  • 확인할 수 없는 경우(정의되지 않음)

예를 들어 XSL 변환 정책을 요청 흐름에서 실행해야 하지만 <Source> 요소가 요청 흐름에 존재하지 않는 응답 변수로 설정된 경우 이 오류가 발생합니다.

진단

  1. 오류가 발생한 XSL 변환 정책과 사용할 수 없는 변수의 이름을 식별합니다. 두 항목은 모두 오류 응답의 faultstring 요소에서 찾을 수 있습니다. 예를 들어 다음 faultstring에서 정책 이름은 xslt이고 변수는 response입니다.

    faultstring": "response message is not available for XSL: xslt
    
  2. 실패한 XSL 변환 정책 XML에서 <Source> 요소에 설정된 변수 이름이 기본 문자열에서 확인된 변수 이름과 일치하는지 확인합니다(위 1단계). 예를 들어 다음 XSL 변환 정책은 <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>
    
  3. <Source> 요소에 사용된 변수가 정의되었고 XSL 변환 정책이 실행되는 흐름에서 사용할 수 있는지 확인합니다.

  4. 변수가 다음 중 하나인 경우

    • 범위를 벗어난 경우(정책이 실행 중인 특정 흐름에서 사용할 수 없음)
    • 확인할 수 없는 경우(정의되지 않음)

    이는 오류의 원인이 됩니다.

    예를 들어 위에 표시된 XSL 변환 정책은 요청 흐름에서 실행되어야 한다고 가정해 보겠습니다. response 변수가 예시 정책의 <Source> 요소에 사용된 것을 기억하세요. response 변수는 응답 흐름에서만 사용할 수 있습니다.

    response 변수가 요청 흐름에 존재하지 않으므로 오류 코드가 수신됩니다.

    steps.xsl.XSLSourceMessageNotAvailable
    

해상도

실패한 XSL 변환 정책의 <Source> 요소에 설정된 변수가 정의되고 정책이 실행되는 흐름에 있는지 확인합니다.

위의 XSL 변환 정책 예시를 수정하려면 응답 흐름에 request 변수가 있으므로 이를 사용하기 위해 <Source> 요소를 수정할 수 있습니다.

<?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"
        }
    }
}

진단

  1. XML 변환 정책에서 평가할 수 없는 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)\""
    
  2. 요청의 일부로 전달된 입력 XML 페이로드가 비어 있는지 확인합니다. 입력 페이로드가 전달되지 않거나 비어 있다면 오류의 원인이 됩니다.

    아래 요청 예시에서는 사용자가 보낸 요청 페이로드(즉, 요청 본문)가 비어있습니다.

    예를 들면 다음과 같습니다.

    curl -v "http://<org>-<env>.apigee.net/v1/xsltransform" -H "Content-Type: application/xml"
    

    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 페이로드를 전달하세요. 예를 들면 다음과 같습니다.

  1. 다음 콘텐츠로 city.xml라는 파일을 만듭니다.

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. 다음과 같이 cURL 명령어를 사용하여 API 호출을 수행합니다.

    curl -v "http://<org>-<env>.apigee.net/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
    

원인: 잘못된 형식의 입력 XML

API 요청의 일부로 XSLTransform 정책에 전달된 입력 XML 페이로드가 잘못된 형식이거나 유효하지 않습니다.

오류 메시지 예

{
    "fault": {
        "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('&lt;') character\"",
        "detail": {
            "errorcode": "steps.xsl.XSLEvaluationFailed"
        }
    }
}

진단

  1. XML 변환 정책에서 평가할 수 없는 XSL 파일 및 실패 원인을 확인합니다. 입력 XML 페이로드가 잘못된 경우 실패한 이유는 예기치 않은 문자가 있음을 나타냅니다. 이 정보는 오류 응답의 faultstring 요소에서 모두 확인할 수 있습니다. 예를 들어 다음 faultstring에서 XSL 파일은 XSL-Transform.xsl이고 실패 원인은 Unexpected char while looking for open tag ('&lt;') character입니다. 즉, XML 페이로드에 '<'가 누락되어 있습니다.

    "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('&lt;') character\""
    
  2. XSLTransform 정책에 전달된 입력 XML 페이로드를 검사하고 유효한 XML 콘텐츠가 있는지 확인합니다. 입력 페이로드가 유효한 XML이 아니면 오류의 원인입니다.

    아래 요청 예시에서는 사용자가 보낸 입력 페이로드(즉, 요청 본문)가 유효하지 않습니다.

    예를 들면 다음과 같습니다.

    curl -v "http://<org>-<env>.apigee.net/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
    

    여기서 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 ('&lt;') character\""
    

해상도

XSLTransform 정책에 전달된 입력이 유효한 XML 페이로드이며 비어있지 않은지 확인합니다.

샘플 XSLTransform 정책 문제를 해결하려면 유효한 XML 페이로드를 전달하세요. 예를 들면 다음과 같습니다.

  1. city.xml 파일을 수정하여 XML의 콘텐츠가 다음과 같도록 합니다.

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. 다음과 같이 cURL 명령어를 사용하여 API를 호출합니다.

    curl -v "http://<org>-<env>.apigee.net/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
    

원인: 잘못된 프리픽스

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"
        }
    }
}

진단

  1. XML 변환 정책에서 평가할 수 없는 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)\""
    
  2. 위의 1단계에서 식별한 XSL 파일의 콘텐츠와 입력 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>&lt;Life&gt;</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>&lt;/Life&gt;</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>&lt;Life&gt;</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>