Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào
tài liệu về Apigee X. thông tin
UnresolvedVariable
Mã lỗi
steps.assignmessage.UnresolvedVariable
Nội dung phản hồi lỗi
{ "fault": { "faultstring": "AssignMessage[policy_name]: unable to resolve variable [variable_name]", "detail": { "errorcode": "steps.assignmessage.UnresolvedVariable" } } }
Nguyên nhân
Lỗi này xảy ra nếu một biến được chỉ định trong Chính sách chỉ định thông báo là:
- ngoài phạm vi (không áp dụng trong quy trình cụ thể nơi chính sách đang được thực thi) hoặc
- không thể phân giải (chưa được xác định)
Ví dụ: lỗi này xảy ra nếu chính sách Chỉ định thông báo thực thi trong luồng yêu cầu, nhưng thuộc tính source
trong phần tử <Copy>
được đặt thành biến response
hoặc error
hoặc bất kỳ biến tuỳ chỉnh nào khác không tồn tại trong luồng yêu cầu.
Chẩn đoán
Xác định Chính sách chỉ định thông báo nơi xảy ra lỗi và tên của biến không có sẵn. Bạn có thể tìm thấy cả hai mục này trong phần tử
faultstring
của phản hồi lỗi.Ví dụ: trong
faultstring
sau đây, tên chính sách làgoogleBook
và biến làvar
:"faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
Trong tệp XML Chỉ định chính sách thông báo không thành công, hãy xác minh rằng tên của biến được sử dụng khớp với tên biến được xác định trong chuỗi lỗi (bước 1 ở trên). Ví dụ: chính sách sau đây đặt thuộc tính nguồn trong phần tử
<Copy>
thành một biến có tên làvar
, khớp với nội dung trongfaultstring
:<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1"> <DisplayName>googleBook</DisplayName> <Properties /> <Copy source="var"> <Headers> <Header name="user-agent" /> </Headers> </Copy> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo> </AssignMessage>
Xác định xem biến có được xác định và có sẵn trong luồng mà chính sách Chỉ định thông báo đang được thực thi hay không.
Nếu biến là:
- ngoài phạm vi (không áp dụng trong quy trình cụ thể nơi chính sách đang được thực thi) hoặc
- không thể phân giải (chưa được xác định)
thì đó là nguyên nhân gây ra lỗi.
Ví dụ: giả sử chính sách Chỉ định thông báo nêu trên thực thi trong luồng yêu cầu. Kiểm tra xem biến
var
có được xác định trong bất kỳ chính sách nào được thực thi trước chính sách Chỉ định thông báo trong luồng yêu cầu hay không. Nếu biến chưa được xác định, bạn sẽ nhận được mã lỗi:steps.assignmessage.UnresolvedVariable
Độ phân giải
Đảm bảo rằng biến được tham chiếu trong chính sách tồn tại và có trong luồng cụ thể, nơi chính sách Chỉ định thông báo đang được thực thi.
Để sửa chính sách mẫu ở trên, bạn có thể sửa đổi thuộc tính nguồn trong phần tử <Copy>
thành biến yêu cầu hoặc bất kỳ biến tuỳ chỉnh nào khác thuộc loại thông báo tồn tại trong luồng yêu cầu.
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
<DisplayName>googleBook</DisplayName>
<Properties />
<Copy source="request">
<Headers>
<Header name="user-agent" />
</Headers>
</Copy>
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
<AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>
VariableOfNonMsgType
Mã lỗi
steps.assignmessage.VariableOfNonMsgType
Nội dung phản hồi lỗi
{ "fault": { "faultstring": "AssignMessage[policy_name]: value of variable [variable] is not of type Message", "detail": { "errorcode": "steps.assignmessage.VariableOfNonMsgType" } } }
Nguyên nhân
Lỗi này xảy ra nếu thuộc tính source
trong phần tử <Copy>
được đặt thành một biến không thuộc loại message.
Biến loại thông báo đại diện cho toàn bộ yêu cầu và phản hồi HTTP. Các biến flow tích hợp sẵn trong Edge request
, response
và message
đều thuộc loại thông báo. Để tìm hiểu thêm về biến thông báo, hãy xem phần Tài liệu tham khảo về biến.
Chẩn đoán
Xác định Chính sách chỉ định thông báo nơi xảy ra lỗi và tên của biến có loại không chính xác. Bạn có thể tìm thấy cả hai mục này trong phần tử
faultstring
của phản hồi lỗi. Ví dụ: trongfaultstring
sau đây, tên chính sách làGenerateGeocodingRequest
và biến làPostalCode
:"faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
Trong tệp XML Assign Message Policy (Chính sách chỉ định thông báo) không thành công, hãy xác minh rằng tên của biến được đặt trong phần tử
<Copy>
khớp với tên biến được xác định trong chuỗi lỗi (bước 1 ở trên). Ví dụ: chính sách sau đây đặt thuộc tính nguồn thành một biến có tên làPostalCode
, khớp với nội dung trongfaultstring
:<AssignMessage name="GenerateGeocodingRequest"> <AssignTo createNew="true" type="request">GeocodingRequest</AssignTo> <AssignVariable> <Name>PostalCode</Name> <Ref>request.queryparam.postalcode</Ref> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> </AssignVariable> <Copy source="PostalCode"> <QueryParams> <QueryParam name="q" /> </QueryParams> </Copy> </AssignMessage>
Xác định xem biến này có phải là loại thông báo hay không:
- Tìm mã trong gói Proxy API, nơi biến được xác định trước tiên.
- Sau khi tìm ra chính sách mà trong đó biến được xác định và điền trước tiên, bạn cần xác định loại biến như sau:
- Kiểm tra giá trị của thuộc tính type (nếu có).
- Nếu không có thuộc tính type, thì biến được coi là một chuỗi.
- Nếu loại của biến không phải là thông báo (chẳng hạn như chuỗi), thì đó là nguyên nhân gây ra lỗi. Bạn có thể tìm hiểu về các biến phổ biến và loại biến trong phần Tài liệu tham khảo về biến.
Ví dụ: hãy xem biến Mã bưu chính trong tệp XML ở trên. Giá trị này được gán giá trị của biến luồng
request.queryparam.postalcode
trong phần tử<AssignVariable>
. Giá trị này là một chuỗi, vì không có thuộc tính loại nào trong phần gán biến.Bây giờ, hãy nhớ rằng biến Mã bưu chính được sử dụng trong phần tử
<Copy>
của chính sách Chỉ định thông báo:<Copy source="PostalCode"> <QueryParams> <QueryParam name="PostalCode" /> </QueryParams> </Copy>
Vì PostalCode không phải là loại thông báo (là một chuỗi trong ví dụ này), nên bạn sẽ nhận được mã lỗi:
steps.assignmessage.VariableOfNonMsgType
Độ phân giải
Đảm bảo rằng thuộc tính source
trong phần tử <Copy>
của chính sách Gán thông báo không thành công đã được đặt thành biến luồng thông báo đã tồn tại.
Để sửa chính sách, bạn có thể sửa đổi thuộc tính source
trong phần tử <Copy>
để chỉ định một biến thuộc loại thông báo. Ví dụ: nếu chính sách Chỉ định thông báo cần thực thi trong luồng yêu cầu, thì bạn có thể sử dụng biến loại thông báo request
hoặc bất kỳ biến tuỳ chỉnh nào khác thuộc loại thông báo.
<AssignMessage name="GenerateGeocodingRequest">
<AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
<AssignVariable>
<Name>PostalCode</Name>
<Ref>request.queryparam.postalcode</Ref>
</AssignVariable>
<AssignVariable>
<Name>Country</Name>
<Ref>request.queryparam.country</Ref>
</AssignVariable>
<Copy source="request">
<QueryParams>
<QueryParam name="PostalCode" />
</QueryParams>
</Copy>
</AssignMessage>