Esta é a documentação do Apigee Edge.
Acesse
Documentação da Apigee X. informações
SourceMessageNotAvailable
Código de erro
steps.messagevalidation.SourceMessageNotAvailable
Corpo da resposta de erro
{ "fault": { "faultstring": "source_var_name message is not available for[policy_name]", "detail": { "Errorcode": "steps.messagevalidation.SourceMessageNotAvailable" } } }
Exemplo de corpo da resposta de erro
{
"fault": {
"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1",
"detail": {
"errorcode": "steps.messagevalidation.SourceMessageNotAvailable"
}
}
}
Causa
Este erro ocorre se a variável message especificada no elemento <Source> da política SOAPMessageValidation é:
- Fora do escopo (não disponível no fluxo específico em que a política está sendo executada) ou
- não é possível resolver (não está definida)
Por exemplo, esse erro ocorre se o elemento <Source> na política SOAPMessageValidation está definido como uma variável que não existe no fluxo em que a política é executada.
Diagnóstico
Identifique o nome da política SOAPMessageValidation em que o erro ocorre e o nome da variável
sourceda string de falha. Por exemplo, na string de falha a seguir, o nome da política SOAPMessageValidation éSOAP-Message-Validation-1e a variávelsourceérequest:"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1"No XML da política SOAPMessageValidation de falha, verifique se o nome da variável definido no elemento
<Source>corresponde ao nome da variável identificado na string de falha (etapa 1 acima).Por exemplo, a seguinte política SOAPMessageValidation especifica uma variável chamada
requestno elemento<Source>, que corresponde ao que está na string de falha:<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>Determine se a variável usada no elemento
<Source>está definida e disponível no fluxo em que a política SOAPMessageValidation está sendo executada.Se a variável for:
- fora do escopo (não disponível no fluxo específico em que a política está sendo executada) ou
- não é possível resolver (não está definida)
essa é a causa do erro.
Como exemplo, digamos que a política SOAPMessageValidation mostrada acima seja executada no fluxo de resposta. No entanto, a variável
requestusada no exemplo do elemento<Source>acima está disponível apenas no fluxo de request.Como a variável
requestnão existe no fluxo de resposta, você recebe o seguinte erro:"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1"
Resolução
Verifique se a variável definida no elemento <Source> da política SOAPMessageValidation de falha está definida e existe no fluxo em que a política é executada.
Para corrigir o exemplo mostrado acima, modifique o elemento <Source> para usar a variável response, que existe no fluxo de resposta:
<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>response</Source>
<ResourceURL>xsd://Script-1.xsd</ResourceURL>
</MessageValidation>
NonMessageVariable
Código de erro
steps.messagevalidation.NonMessageVariable
Corpo da resposta de erro
{ "fault": { "faultstring": "Variable var_name does not resolve to a Message" "detail": { "errorcode": "steps.messagevalidation.NonMessageVariable" } } }
Exemplo de corpo da resposta de erro
{
"fault": {
"faultstring": "Variable message.content does not resolve to a Message",
"detail": {
"errorcode": "steps.messagevalidation.NonMessageVariable"
}
}
}
Causa
Esse erro ocorrerá se o elemento <Source> na política SOAPMessageValidation estiver definido como uma variável que não seja do tipo Message.
As variáveis do tipo Message representam solicitações e respostas HTTP completas. As variáveis de fluxo integradas do Apigee Edge request, response e message são do tipo Mensagem. Saiba mais sobre as variáveis de mensagem na Referência de variáveis.
Diagnóstico
Identifique o nome da variável que não é resolvida como um tipo Message da string de falha. Por exemplo, na string de falha a seguir, o nome da variável é
message.content:"faultstring": "Variable message.content does not resolve to a Message"Examine todas as políticas SOAPMessageValidation no proxy de API específico em que a falha ocorreu. Pode haver uma ou mais políticas SOAPMessageValidation. Identifique uma ou mais políticas específicas SOAPMessageValidation em que a variável especificada no elemento
<Source>corresponde ao nome da variável identificado na string de falha (etapa 1 acima).Por exemplo, a política a seguir define o elemento
<Source>como uma variável chamadamessage.content, que corresponde ao que está na string de falha:<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>message.content</Source> <ResourceURL>xsd://Script-1.xsd</ResourceURL> </MessageValidation>Como a variável
message.contentnão é do tipo Message, você receberá o erro:"faultstring": "Variable message.content does not resolve to a Message"
Resolução
Verifique se o elemento <Source> na política SOAPMessageValidation de falha está definido como uma variável do tipo Message existente no fluxo em que a política é executada.
Para corrigir a política, modifique o elemento <Source> para especificar uma variável do tipo Message. Por exemplo, na política SOAPMessageValidation de falha, é possível especificar o elemento <Source> como request:
<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>xsd://Script-1.xsd</ResourceURL>
</MessageValidation>
Failed
Código de erro
steps.messagevalidation.Failed
Corpo da resposta de erro
{ "fault": { "faultstring": "Variable var_name failed with reason: \"reason [Line varline_num "detail": { "errorcode": "steps.messagevalidation.Failed" } } }
Exemplo de corpo da resposta de erro
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
Causa
Esse erro ocorrerá se a política SOAPMessageValidation não validar o payload da mensagem de entrada no esquema XSD ou na definição WSDL. Isso também ocorrerá se houver JSON ou XML malformado na mensagem de payload.
Veja a seguir algumas das possíveis causas que podem causar esse erro:
| Causa | Descrição |
| Payload XML não correspondente | O payload XML de entrada não segue o esquema XSD especificado na política SoapMessageValidation. |
| Payload SOAP não correspondente | O payload SOAP de entrada não segue a definição WSDL especificada na política SoapMessageValidation. |
| JSON ou XML malformado | O payload SOAP de entrada não contém um XML ou JSON bem formado. |
Causa: payload XML não correspondente
Esse erro ocorre se o payload XML de entrada não adere ao esquema XSD especificado no elemento <ResourceURL> da política SoapMessageValidation.
Exemplo de mensagem de erro
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
Diagnóstico
Identifique o nome da política SOAPMessageValidation, o motivo da falha e o número da linha em que o payload XML não corresponde ao esquema XSD. Todas essas informações estão na string de falha. Por exemplo, na string de falha a seguir, o nome da política SOAPMessageValidation é
SOAP-Message-Validation-1,, o motivo da falha éExpecting a child element but found none [Line 9]e o número da linha é9."faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\""Analise a política SOAPMessageValidation e confirme se ela usa um arquivo de definição de esquema XSD para validar as mensagens. Por exemplo, a seguinte política SOAPMessageValidation tem um arquivo de recurso XSD no elemento
<ResourceURL>:<?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"? MessageValidation async="false" continueOnError="false&quo>t; en<abled=">;true" name="SO<AP-Message-V>alida<tion-1">; < DisplayName>SOAP <Messag>e Valid<ation-1>/Disp<layName > Properties/ S<OAPMessage/ > < Sourcerequest/S>ource ResourceURLxsd://Script-1.xsd/ResourceURL /MessageValidationExamine o payload de entrada no número da linha identificado na Etapa 1 acima para entender o que causou a falha.
Amostra de payload XML de entrada
<?xml version=">1<.0"? soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.o>r<g/2003/05>/soap<-encoding" soap:Body shipOrder xmlns:xsi="http://www>.w3.o<rg/200>0/10/XMLS<chem>a-instance"<; > ship<To > n<ameKa>rl Kalcks<tein>/name /sh<ipTo<>/span> items < > item < tit>l<eI love A>PIs/title < > <quanti>ty1/quant<ity > < >p<rice2.90/p>r<ice > < /item /it>ems /shipOrder /soap:Body /soap:EnvelopeNo exemplo mostrado acima, a linha 9 tem a tag final
</shipTo>.Analise o arquivo de definição de esquema XML,
Script-1.xsd, usado na política SOAPMessageValidation para ver como ficará o elemento<shipTo>:... <xsd:element name="shipTo" type=&quo>t;shi<pAddress"/ ... xsd:complexTyp>e< name=">s<hipAddress" xsd:sequence xsd:element >n<ame="name" type="xsd:string&q>u<ot;/ xsd:element name="street" type>=<"xsd:string"/ xsd:element name=&quo>t<;address">;< type="xsd:>string"/ xsd:element name="country" type="xsd:string"/ /xsd:sequence /xsd:complexType ...De acordo com o XSD de amostra usado para validação, o elemento
<shipTo>precisa ter os elementos filhos<name>,<street>,<address>e<country>. No entanto, o payload XML de entrada tem apenas um elemento filho<name>. Como resultado, você recebe o erro:"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\""
Resolução
Há duas maneiras de resolver esse erro de validação:
Solução nº 1
Se você determinar que a definição de esquema XSD impõe limitações desnecessárias e apenas o elemento filho <name> é obrigatório no elemento <shipTo>, modifique o Script-1.xsd usado na política SOAPMessageValidation. Para validar o exemplo de payload acima, você pode modificar o arquivo XSD da seguinte forma:
...
<xsd:element name="shipTo" type=&quo>t;shi<pAddress"/
...
xsd:complexTyp>e< name=">s<hipAddress"
xsd:sequence
xsd:element >n<ame="nam>e<" type=&quo>t;xsd:string"/
/xsd:sequence
/xsd:complexType
Solução nº 2
Se o arquivo de definição XSD estiver correto, o payload XML de entrada poderá ser alterado para corresponder a xsd. Por exemplo, é possível modificar o payload para cumprir o xsd da seguinte maneira:
<?xml version=">;<1.0"
soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.o>r<g/2003/05>/soap<-encoding"
soap:Body
shipOrder xmlns:xsi="http://www>.w3.o<rg/200>0/10/XMLS<chem>a-instance"<;
> shipTo
< > nameKarl Ka<lckstei>n/name
< s>treet1020 Parkway/stree<t
> address<Mountai>n V<iew, CA >94043</addres>s
< >countryUS<A/co>untry
/sh<ipTo<>/span>
items
< > item
< tit>l<eI love A>PIs/title
< > <quanti>ty1/quant<ity
> < >p<rice2.90/p>r<ice
> < /item
/it>ems
/shipOrder
/soap:Body
/soap:Envelope
Causa: payload SOAP não correspondente
Esse erro ocorrerá se o payload SOAP de entrada não estiver em conformidade com a definição WSDL especificada no elemento <ResourceURL> da política SoapMessageValidation.
Exemplo de mensagem de erro
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
Diagnóstico
Identifique o nome da política SOAPMessageValidation, o motivo da falha e o número da linha na qual o payload SOAP não corresponde à definição WSDL. Você encontra todas essas informações na string de falha. Por exemplo, na string de falha a seguir, o nome da política SOAPMessageValidation é
SOAP-Message-Validation-1, o motivo da falha é\"Element name mismatch. Wildcard? [Line 11]\""e o número da linha é11:"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\""Examine a política SOAPMessageValidation e confirme se ela usa um esquema
wsdlpara validar as mensagens. Por exemplo, a seguinte política SOAPMessageValidation tem um arquivo de recursowsdlno elemento<ResourceURL>:<?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"? MessageValidation async="false" continueOnError="false&quo>t; en<abled=">;true" name="SO<AP-Message-V>alida<tion-1">; < DisplayName>SOAP <Messag>e Valid<ation-1>/D<isplayName > Properties/ SOAPMessage/ <Sourcereques>t</Source ResourceU>RLwsdl://SOAP-Message-Validation-1.wsdl/ResourceURL /MessageValidationExamine o payload de entrada no número da linha identificado na Etapa 1 para entender o que causou a falha.
Exemplo de payload SOAP de entrada
<?xml version=">1<.0"? soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.o>r<g/2003/05>/<soap-encoding" soap:Body shipOrder xmlns:xsi="http://www>.w3<.org/2>000/1<0/XM>LSchema-instanc<e&quo>t; <shipTo> nameKar<l Kalck>stein</name > street1020 Parkway/s<treet > add<ressMou>nta<in View,> CA< 94043/>add<ress<>/span> c<ount>ryUSA/c<ountr>y /shipTo< ite>ms <item > < titleI >love AP<Is/ti>tle < >quant<ity1/>qua<ntity<>/span>price2.90/price /item /itemsNo exemplo mostrado acima, a linha 11 tem o elemento filho
<country>no elemento<shipTo>.Examine o arquivo de definição WSDL,
SOAP-Message-Validation-1.wsdl, usado na política SOAPMessageValidation para ver o que pode estar errado com o elemento filho<country>no elemento<shipTo>:<?xml version="1.0" encoding=&qu>o<t;ISO-8859-1"? wsdl:definitions xmlns:wsdl="http://s>chema<s.xmlsoap.>org/wsd<l/" wsdl:types xsd:schema xmlns:xsd=&quo>t<;http://www.w3.org/2001/XMLSchema" xs>d<:element name="shipOrde>r<" type=>&<quot;order"/ xsd:complexType name=">o<rder" xsd:sequence xsd:element name>=<"shipTo&>q<uot; type=">s<hipAddress"/ xsd:element name>=<"items&>q<uot; type="cdItems"/ /xsd:sequen>c<e /xsd:complexType xsd:complexType name=&quo>t<;shipAddress" xsd:sequence xsd:element n>a<me="name>" type="xsd:string"/ xsd:element name="street" type="xsd:string"/ xsd:element name="address" type="xsd:string"/ /xsd:sequence ...De acordo com a definição WSDL usada para validação, o elemento
<shipTo>não tem um elemento filho<country>. Como resultado, você recebe o erro:"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\""
Resolução
Há duas maneiras de resolver esse erro de validação:
Solução nº 1
Se você determinar que a definição WSDL usada está incorreta, poderá alterar o SOAP-Message-Validation-1.wsdl usado na política SOAPMessageValidation. Para validar o exemplo de payload acima, você pode modificar o arquivo da seguinte maneira:
...
<xsd:complexType name="shipAdd>ress&q<uot;`
..>.
seq<uence
element name="name">; typ<e="xsd:string"/
element na>me=&q<uot;street" type="xsd:string&qu>ot;/
< element name="address" type>=<"xsd>:string"/
element name="country" type="xsd:string"/
/sequence
Solução nº 2
Se a definição WSDL estiver correta, o payload SOAP de entrada poderá ser alterado para corresponder à definição WSDL.
Por exemplo, é possível modificar o payload SOAP de entrada da seguinte maneira:
<?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"?
soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
soap:encodingStyle=&>q<uot;http:>/</www.w3.org/2003/05/soap-encoding"
soap:Body
shipOrder xmlns:>xsi=&<quot;h>ttp://www<.w3.>org/2000/10/XML<Schem>a-instanc<e">;
shipTo<
> nameKar<l Kalck>stein/name
stre<et1020 P>arkwa<y/stree>t
< >addressMo<unta>in View, CA 9<4043/>address
< /ship>To
items
< >i<tem
> titleI< love> API<s/titl>e
< >quant<ity1/q>uantity
price2.90/price
/item
/items
Causa: JSON ou XML malformado
Esse erro ocorrerá se o payload SOAP de entrada não estiver em conformidade com a definição WSDL especificada no elemento <ResourceURL> da política SoapMessageValidation.
Exemplo de mensagem de erro
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed< with r>eason: \"Expected \/title at line 15(possibly around char 420)\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
Diagnóstico
Identifique o nome da política SOAPMessageValidation, o motivo da falha e o número da linha do payload XML que não corresponde à definição WSDL. Você encontra todas essas informações na string de falha. Por exemplo, na string de falha a seguir, o nome da política SOAPMessageValidation é
SOAP-Message-Validation-1, o motivo da falha éExpected </title> at line 15(possibly around char 420):e o número da linha é15."faultstring": "SOAP-Message-Validation-1 failed with reas<on: \&>quot;Expected /title at line 15(possiblyaround char 420)\""Examine o payload de entrada no número da linha identificado na Etapa 1 acima para entender o que causou a falha.
Exemplo de payload SOAP de entrada
<?xml version=">1<.0"? soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.o>r<g/2003/05>/<soap-encoding" soap:Body shipOrder xmlns:xsi="http://www>.w3<.org/2>000/1<0/XM>LSchema-instanc<e&quo>t; <shipTo> nameKar<l Kalck>stein</name > street1020 Parkway/s<treet > add<ressMou>nta<in View,> CA< 94043/>add<ress<>/span> c<ount>ryUSA/c<ountr>y /shipTo< item>s i<tem > < titleI l>ove API<s/tit>les < >quant<ity1/>qua<ntity<>/span> < price>2<.90/price > < /item /it>ems /shipOrder /soap:Body /soap:EnvelopeNo exemplo mostrado acima, a linha 15 do XML de entrada tem o elemento
<title>, mas não é fechada com uma tag final</title>.
Resolução
Para resolver o erro, verifique se o payload de entrada é válido e está formado corretamente.
Por exemplo, você pode modificar o payload XML da entrada da seguinte maneira:
...
</shipTo>
<items>
<item>
<title>I love APIs</title>
<quantity>1</quantity>
<price>2.90</price>
</item>
</items>
...