Está a ver a documentação do Apigee e do Apigee Hybrid.
Ver documentação do
Apigee Edge.
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 for:
- Fora do âmbito (não disponível no fluxo específico onde a política está a ser executada) ou
- não é possível resolver (não está definido)
Por exemplo, este erro ocorre se o elemento <Source>
na política SOAPMessageValidation estiver definido para uma variável que não existe no fluxo onde a política é executada.
Diagnóstico
Identifique o nome da política SOAPMessageValidation onde ocorre o erro e o nome da variável
source
da string de falha. Por exemplo, na seguinte string de falha, o nome da política SOAPMessageValidation éSOAP-Message-Validation-1
e a variávelsource
érequest
:"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1"
No XML da política SOAPMessageValidation com falha, verifique se o nome da variável definido no elemento
<Source>
corresponde ao nome da variável identificado na string de falha (passo 1 acima).Por exemplo, a seguinte política SOAPMessageValidation especifica uma variável denominada
request
no 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>
Determinar se a variável usada no elemento
<Source>
está definida e disponível no fluxo no qual a política SOAPMessageValidation está a ser executada.Se a variável for:
- Fora do âmbito (não disponível no fluxo específico em que a política está a ser executada) ou
- não é possível resolver (não está definido)
Então, essa é a causa do erro.
Por exemplo, suponhamos que a política SOAPMessageValidation apresentada acima é executada no fluxo de resposta. No entanto, a variável
request
usada no exemplo do elemento<Source>
acima só está disponível no fluxo de pedido.Uma vez que a variável
request
não existe no fluxo de respostas, recebe o seguinte erro:"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1"
Resolução
Certifique-se de que a variável definida no elemento <Source>
da política SOAPMessageValidation com falha está definida e existe no fluxo onde a política é executada.
Para corrigir o exemplo apresentado acima, pode modificar 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
Este erro ocorre se o elemento <Source>
na política SOAPMessageValidation estiver definido para uma variável que não seja do tipo Message.
As variáveis de tipo de mensagem representam pedidos e respostas HTTP completos. As variáveis de fluxo do Apigee incorporadas request
, response
e message
são do tipo Message. Para saber mais sobre as variáveis de mensagens, consulte a referência de variáveis.
Diagnóstico
Identifique o nome da variável que não é resolvida para um tipo de mensagem a partir da string de falha. Por exemplo, na seguinte string de falha, 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 onde ocorreu a falha. Pode haver uma ou mais políticas SOAPMessageValidation. Identifique a política ou as políticas SOAPMessageValidation específicas em que a variável especificada no elemento
<Source>
corresponde ao nome da variável identificado na string de falha (passo 1 acima).Por exemplo, a seguinte política define o elemento
<Source>
para uma variável denominadamessage.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>
Uma vez que a variável
message.content
não é do tipo Message, recebe o erro:"faultstring": "Variable message.content does not resolve to a Message"
Resolução
Certifique-se de que o elemento <Source>
na política SOAPMessageValidation com falha está definido como uma variável do tipo Message que existe no fluxo onde a política é executada.
Para corrigir a política, pode modificar o elemento <Source>
para especificar uma variável do tipo Message. Por exemplo, na política SOAPMessageValidation com falha, pode 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>
Com falhas
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
Este erro ocorre se a política SOAPMessageValidation não conseguir validar a carga útil da mensagem de entrada em relação ao esquema XSD ou à definição WSDL. Também ocorre se houver JSON ou XML com formato incorreto na mensagem de payload.
Seguem-se algumas das possíveis causas que podem originar este erro:
Causa | Descrição |
Conteúdo XML não correspondente | O payload XML de entrada não cumpre o esquema XSD especificado na política SoapMessageValidation. |
Payload SOAP em conflito | O payload SOAP de entrada não cumpre a definição WSDL especificada na política SoapMessageValidation. |
JSON ou XML com formato incorreto | O payload SOAP de entrada não contém XML ou JSON com formato correto. |
Causa: payload XML não correspondente
Este erro ocorre se a carga útil XML de entrada não cumprir o 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 a carga útil XML não corresponde ao esquema XSD. Todas estas informações estão na string de falha. Por exemplo, na seguinte string de falha, 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]\""
Examine a política SOAPMessageValidation e confirme que usa um ficheiro de definição de esquema XSD para validar mensagens. Por exemplo, a seguinte política SOAPMessageValidation tem um ficheiro de recurso XSD no elemento
<ResourceURL>
:<?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/> <SOAPMessage/> <Source>request</Source> <ResourceURL>xsd://Script-1.xsd</ResourceURL> </MessageValidation>
Examine a carga útil de entrada no número da linha identificado no passo 1 acima para compreender o que causou a falha.
Payload XML de entrada de amostra
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <soap:Body> <shipOrder xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"> <shipTo> <name>Karl Kalckstein</name> </shipTo> <items> <item> <title>I love APIs</title> <quantity>1</quantity> <price>2.90</price> </item> </items> </shipOrder> </soap:Body> </soap:Envelope>
No exemplo apresentado acima, a linha 9 tem a etiqueta final
</shipTo>
.Examine o ficheiro de definição do esquema XML,
Script-1.xsd
, usado na política SOAPMessageValidation para ver como o elemento<shipTo>
deve ser:... <xsd:element name="shipTo" type="shipAddress"/> ... <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> ...
De acordo com o XSD de exemplo usado para validação, o elemento
<shipTo>
tem de ter os elementos subordinados<name>
,<street>
,<address>
e<country>
. No entanto, a carga útil XML de entrada tem apenas um elemento subordinado,<name>
. Como resultado, recebe o erro:"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\""
Resolução
Existem duas formas de resolver este erro de validação:
Solução n.º 1
Se determinar que a definição do esquema XSD impõe limitações desnecessárias e que apenas o elemento filho <name>
é necessário no elemento <shipTo>
, pode modificar o Script-1.xsd
usado na política SOAPMessageValidation. Para validar o exemplo de payload acima, pode modificar o ficheiro XSD da seguinte forma:
...
<xsd:element name="shipTo" type="shipAddress"/>
...
<xsd:complexType name="shipAddress">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
Solução n.º 2
Se o ficheiro de definição XSD estiver correto, pode alterar a carga útil XML de entrada para corresponder ao xsd
. Por exemplo, pode modificar o payload para estar em conformidade com o xsd
da seguinte forma:
<?xml version="1.0">
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
<shipOrder xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
<shipTo>
<name>Karl Kalckstein</name>
<street>1020 Parkway</street>
<address>Mountain View, CA 94043</address>
<country>USA</country>
</shipTo>
<items>
<item>
<title>I love APIs</title>
<quantity>1</quantity>
<price>2.90</price>
</item>
</items>
</shipOrder>
</soap:Body>
</soap:Envelope>
Causa: payload SOAP em conflito
Este erro ocorre se a carga útil SOAP de entrada não cumprir 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 em que a carga útil SOAP não corresponde à definição WSDL. Pode encontrar todas estas informações na string de falha. Por exemplo, na seguinte string de falha, 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 que usa um esquema
wsdl
para validar mensagens. Por exemplo, a seguinte política SOAPMessageValidation tem um ficheiro de recursoswsdl
no elemento<ResourceURL>
:<?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/> <SOAPMessage/> <Source>request</Source> <ResourceURL>wsdl://SOAP-Message-Validation-1.wsdl</ResourceURL> </MessageValidation>
Examine a carga útil de entrada no número da linha identificado no passo 1 para compreender 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.org/2003/05/soap-encoding"> <soap:Body> <shipOrder xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"> <shipTo> <name>Karl Kalckstein</name> <street>1020 Parkway</street> <address>Mountain View, CA 94043</address> <country>USA</country> </shipTo> <items> <item> <title>I love APIs</title> <quantity>1</quantity> <price>2.90</price> </item> </items>
No exemplo apresentado acima, a linha 11 tem o elemento secundário
<country>
no elemento<shipTo>
.Examine o ficheiro 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="ISO-8859-1"?> <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:types> <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:sequence> ...
De acordo com a definição WSDL usada para a validação, o elemento
<shipTo>
não tem um elemento subordinado<country>
. Como resultado, recebe o erro:"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\""
Resolução
Existem duas formas de resolver este erro de validação:
Solução n.º 1
Se determinar que a definição WSDL usada está incorreta, pode alterar o SOAP-Message-Validation-1.wsdl
usado na política SOAPMessageValidation. Para validar o exemplo de payload acima, pode modificar o ficheiro da seguinte forma:
...
<xsd:complexType name="shipAddress">`
...
<sequence>
<element name="name" type="xsd:string"/>
<element name="street" type="xsd:string"/>
<element name="address" type="xsd:string"/>
<element name="country" type="xsd:string"/>
</sequence>
Solução n.º 2
Se a definição WSDL estiver correta, pode alterar a carga útil SOAP de entrada para corresponder à definição WSDL.
Por exemplo, pode modificar o payload SOAP de entrada da seguinte forma:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
<shipOrder xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
<shipTo>
<name>Karl Kalckstein</name>
<street>1020 Parkway</street>
<address>Mountain View, CA 94043</address>
</shipTo>
<items>
<item>
<title>I love APIs</title>
<quantity>1</quantity>
<price>2.90</price>
</item>
</items>
Causa: JSON ou XML com formato incorreto
Este erro ocorre se a carga útil SOAP de entrada não cumprir 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: \"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. Pode encontrar todas estas informações na string de falha. Por exemplo, na seguinte string de falha, 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 reason: \"Expected </title> at line 15(possibly around char 420)\""
Examine a carga útil de entrada no número da linha identificado no passo 1 acima para compreender 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.org/2003/05/soap-encoding"> <soap:Body> <shipOrder xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"> <shipTo> <name>Karl Kalckstein</name> <street>1020 Parkway</street> <address>Mountain View, CA 94043</address> <country>USA</country> </shipTo> <items> <item> <title>I love APIs</titles> <quantity>1</quantity> <price>2.90</price> </item> </items> </shipOrder> </soap:Body> </soap:Envelope>
No exemplo apresentado acima, a linha 15 do XML de entrada tem o elemento
<title>
, mas não está fechado com uma etiqueta final</title>
.
Resolução
Para resolver o erro, certifique-se de que a carga útil de entrada é válida e está formada corretamente.
Por exemplo, pode modificar o payload XML de entrada da seguinte forma:
...
</shipTo>
<items>
<item>
<title>I love APIs</title>
<quantity>1</quantity>
<price>2.90</price>
</item>
</items>
...