[RESOLVIDO] Problema com Flex e SOAP: Fault lançada quando string de retorno ultrapassa tamanho espe

3 respostas
joaop.ribs

Olá pessoal. Sou novo em Flex e SOAP, então desculpem se a pergunta parecer óbvia demais.

Estou com um problema estranho. Tenho uma aplicação em Flex que consome um webservice, e tudo funciona muito bem até eu tentar retornar uma string maior que 490 caracteres, o que acho bastante estranho. Em meus testes, se eu tentar retornar uma string de 491 caracteres, recebo a seguinte mensagem:

SOAP Response cannot be decoded. Raw response: faultCode="DecodingError" faultDetail="null"

Fiz um cliente PHP, só pra testar, que consome o mesmo webservice, e chama a mesma operação. Mas no caso desse outro cliente, não tenho nenhum erro e a string é retornada completa, sem problema algum.,

Aqui está meu script:

?xml version="1.0" encoding="utf-8"?>

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 

               xmlns:s="library://ns.adobe.com/flex/spark" 

               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">



    <fx:Script>

        <![CDATA[

            import mx.collections.ArrayCollection;

            import mx.rpc.events.ResultEvent;

            

            [Bindable]private var testValue:String;

            

            protected function floappService_variableTestResultHandler(event:ResultEvent):void

            {

                this.testValue = event.result as String;

            }

            

        ]]>

    </fx:Script>



    

    

    <fx:Declarations>

        <s:WebService id="ws"

                      wsdl="mywebservice?wsdl"
>

            

            <s:operation name="variableTest" 

                         result="floappService_variableTestResultHandler(event)"

                         fault="mx.controls.Alert.show(event.fault.faultString)"/>

            

        </s:WebService>

    </fx:Declarations>

    

    <mx:VBox width="100%" height="100%">

        

        

        <mx:Form width="100%" height="100%">


            <mx:FormItem>

                <mx:HBox>

                    <s:Button label="Variable Test" click="ws.variableTest()"/>

                    <mx:Text text="{testValue}"/>

                </mx:HBox>

            </mx:FormItem>

            

        </mx:Form>

    </mx:VBox>

</s:Application>

Aqui a resposta que recebo, sem faltas (string com 490 'A's)

HTTP/1.1 200 OK
Date: Tue, 21 Sep 2010 17:36:46 GMT
Server: Apache/2.2.14 (Ubuntu)
X-Powered-By: PHP/5.3.2-1ubuntu4.2
X-SOAP-Server: NuSOAP/0.7.3 (1.114)
Content-Length: 1027
Vary: Accept-Encoding
Connection: close
Content-Type: text/xml; charset=ISO-8859-1

<?xml version="1.0" encoding="ISO-8859-1"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://fusionforge.inteligis.paqtc.org.br">
<SOAP-ENV:Body>
<ns1:variableTestResponse xmlns:ns1="http://fusionforge.inteligis.paqtc.org.br">
<myReturn xsi:type="xsd:string">AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</myReturn>
</ns1:variableTestResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

E aqui o caso quando acontece o problema (string com 491 'A's):

HTTP/1.1 200 OK
Date: Tue, 21 Sep 2010 17:40:40 GMT
Server: Apache/2.2.14 (Ubuntu)
X-Powered-By: PHP/5.3.2-1ubuntu4.2
X-SOAP-Server: NuSOAP/0.7.3 (1.114)
Content-Length: 1028
Vary: Accept-Encoding
Connection: close
Content-Type: text/xml; charset=ISO-8859-1

<?xml version="1.0" encoding="ISO-8859-1"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://fusionforge.inteligis.paqtc.org.br">
<SOAP-ENV:Body>
<ns1:variableTestResponse xmlns:ns1="http://fusionforge.inteligis.paqtc.org.br">
<myReturn xsi:type="xsd:string">AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</myReturn>
</ns1:variableTestResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Chequei os dois XMLs no XML Validator da W3 (http://www.w3schools.com/XML/xml_validator.asp), e não tive erros

A única diferença entre as duas respostas é o Content-Length, então acho que o problema está por aí (mas não sei o quê/por que)

Obrigado por qualquer ajuda que seja possível!

3 Respostas

joaop.ribs

alguma ideia? :frowning:

renzonuccitelli

Nenhuma idéia. Mas o sistema é legado? Pq não fazer via chamada remota em vez de SOAP pra ver se dá o mesmo problema?

[]s

joaop.ribs

Consegui resolver o problema!

Esse caractere estranho no XML de resposta, , foi o que me levou à solução. Pesquisei um pouco, e vi que esse é chamado de Byte Order Mark (BOM - http://en.wikipedia.org/wiki/Byte_order_mark), e aparentemente é acrescentado em alguns documentos com charset UTF-8.

Pois bem, o problema era ele. Consegui removê-lo usando o VIM, com o seguinte comando

vim arquivo.php :set nobomb :wq

Fiz isso para todos os meus arquivos de SOAP no servidor, já que o caractere é invisível, e agora tudo voltou a funcionar! :slight_smile:

Probleminha chato viu, ficar brigando mais de uma semana com coisa invisível, eu hein. Não sou caça-fantasma!

Criado 21 de setembro de 2010
Ultima resposta 24 de set. de 2010
Respostas 3
Participantes 2