Bom,

Apenas para fechar a thread, acabei optando por deixar os números
(inteiros ou decimais) no flex como Object.
À meu ver é uma solução feia, mas fazer um fork e modificar o código
do blazeds apenas para meu projeto seria pior imo.

Fiz uma função que checa se determinada entrada do usuário é vazio ou
se o resultado é NaN e retorna um null:

private function nullableNumber(str:String):Object
{
        var retorno:Object = null;
        if(str != ""){
                retorno = Number(str);
                if (isNaN(retorno as Number))
                {
                        return null;
                }
        }
        return retorno;
}

Utilizo ela ao transformar String em Number, e no java mapeio para
Integer e Double sendo que o mapeamento irá funcionar "corretamente"
(null do Flex será null no java).

Obrigado à todos que ajudaram.



2009/10/21 Mário Júnior <[email protected]>:
> errata: não é Leonardo, é Felipe Leonhardt.
>
>
>
> 2009/10/21 Mário Júnior <[email protected]>
>>
>> Vixii... dizer as possibilidades de extensao é assunto para um livro,
>> tanto q sexta-feira agora o Autor do Livro Professional BlazeDS estará
>> presente na Sexta-Flex, mais detalhes:
>>
>> http://www.igorcosta.com/blog/
>>
>> A opçao do Leonardo é igual a minha sugestao numero 3, mas nesse caso ao
>> alterar a classe Amf3Input vc terá q compilar uma nova versao do blazeDS
>> para vc, por isso eu disse em criar um "fork".
>>
>> Já a opção do Adapter, vc pode definir via xml (como vc mesmo já descobriu
>> no remote-config).
>>
>>
>>
>>
>>
>>
>> 2009/10/21 Eduardo Rodrigues <[email protected]>
>>>
>>> Mário, eu já consegui redefinir o JavaAdapter no meu
>>> remoting-config.xml, vc têm alguma referência que mostre como
>>> redefinir os outros pontos??? No caso o Amf3Input, mas eu gostaria de
>>> saber quais são todas as possibilidades de extensão do BlazeDS...
>>>
>>> 2009/10/21 Frederico Lellis <[email protected]>:
>>> >
>>> > Alguem que ja implementou a opção numero 4 (né Mario hehehe) podia
>>> > disponibilizar a classe aqui pro grupo ne?
>>> >
>>> > abraços.
>>> >
>>> >
>>> > 2009/10/21 Eduardo Rodrigues <[email protected]>:
>>> >>
>>> >> "Seguinte... se no Java estiver trabalhando com Integer / Long /
>>> >> Double (são wrappers, não são tipos nativos) e o Flex te mandar um
>>> >> NaN, o BlazeDS vai serializar para null?!? Acho q nao.... qual versao
>>> >> do BlazeDS está usando?"
>>> >>
>>> >> Nao, pelos meus testes ele converte pra 0.
>>> >>
>>> >> Estou tendendo para a opção 4. Achei este tópico no flexbrasil do
>>> >> Felipe:
>>> >>
>>> >> "Bom dia,
>>> >>
>>> >> Segundo a própria Adobe ela não considera como um BUG, bom, deixa eu
>>> >> tentar explicar.
>>> >>
>>> >> No flex não existem númericos como NULL e sim NaN(Not a Number) que se
>>> >> você observar teóricamente os NaN's para o Java(Double.NaN) possuem
>>> >> uma referência e não são nulos e que ao ser "traduzido" para o Java e
>>> >> se o objeto esperado para esse número for um Long por exemplo o
>>> >> BlazeDS ao fazer algo como "referenciaDoNumeroDouble.longValue()" o
>>> >> JAVA AUTOMATICAMENTE joga 0 ou seja nao é um BUG porque NaN não é
>>> >> NULL. Por ser assim funcionalmente está correto, mas não atende ao uso
>>> >> de muitos programadores, que precisam necessariamente que venha NULL,
>>> >> para evitar mais polêmica, sim eu concordo que Adobe poderia fazer com
>>> >> que no FLEX, lá mesmo, para os Number's fosse NULL por default e não
>>> >> NaN.
>>> >>
>>> >> Lembrando que tratar isso na camada de negócio você poderá ter
>>> >> inúmeros problemas, por exemplo: e se você quiser que realmente venha
>>> >> 0 do Flex? Então bastante cuidado.
>>> >>
>>> >> E para resolver isso, sendo que raramente em uma galáxia muito
>>> >> distante eu vou usar o NaN? hehhehehe
>>> >>
>>> >> 1. Estude muito o fluxo do BlazeDS antes de passar para a camada de
>>> >> Negócio do seu back-end. Como?
>>> >> Resp: Você pode criar reimplementar classes do blazeDS no momento que
>>> >> ele está deserializando os objetos são elas:
>>> >> 1. AMFEndpoint
>>> >> 2. AmfMessageDeserializer
>>> >> 3. Amf0Input
>>> >> 4. Amf3Input
>>> >>
>>> >> e na classe Amf3Input você sobreescreve o método readObject() e faz da
>>> >> seguinte maneira:
>>> >>
>>> >> @Override
>>> >> public Object readObject() throws ClassNotFoundException, IOException
>>> >> {
>>> >> Object value = super.readObject();
>>> >> if (value instanceOf Double && ((Double).value).isNaN()){
>>> >> value = null;
>>> >> }
>>> >> return value;
>>> >> }
>>> >>
>>> >> Att. e espero ter ajudado,
>>> >>
>>> >> Felipe Leonhardt"
>>> >>
>>> >> http://forum.flexbrasil.com.br/viewtopic.php?f=8&t=1843&p=5814#p5814
>>> >>
>>> >> 2009/10/21 Mário Júnior <[email protected]>:
>>> >>> Acho q isso merece um post no blog.... Estendendo e ENNNtendendo o
>>> >>> JavaAdapter do BlazeDS .... assim q tiver tempo posto lá.
>>> >>>
>>> >>>
>>> >>>
>>> >>> 2009/10/21 Mário Júnior <[email protected]>
>>> >>>>
>>> >>>> Olá pessoal!
>>> >>>>
>>> >>>> Seguinte... se no Java estiver trabalhando com Integer / Long /
>>> >>>> Double
>>> >>>> (são wrappers, não são tipos nativos) e o Flex te mandar um NaN, o
>>> >>>> BlazeDS
>>> >>>> vai serializar para null?!? Acho q nao.... qual versao do BlazeDS
>>> >>>> está
>>> >>>> usando?
>>> >>>>
>>> >>>> Como Frederico disse, as opções 1 e 2 não se aplicam ao caso do
>>> >>>> Eduardo,
>>> >>>> pq ele PODE precisar do numero 0 (zero). Então, o correto é aplicar
>>> >>>> a
>>> >>>> solução 3 ou 4 (eu uso a 4, mais flexivel).
>>> >>>>
>>> >>>> Assim, se o BlazeDS te mandar um 0 (zero) vc vai persistir o
>>> >>>> 0(zero), mas
>>> >>>> lembre-se que o Number em AS3 não existe null, existe o NaN (Not a
>>> >>>> Number),
>>> >>>> e o BlazeDS "padrao" converte NaN para 0 por isso q usar wrappers
>>> >>>> (nos meus
>>> >>>> testes) nao funcionaram! Portanto, o ideal é oq o Frederico disse:
>>> >>>> aplique
>>> >>>> as opções 3 ou 4.. bom, eu mesmo posso recomendar a 4.
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>> Abraços.
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>> 2009/10/21 Augustus Costa <[email protected]>
>>> >>>>>
>>> >>>>> Essa sua solução é meio gambiarra vei... isso por que minha coluna
>>> >>>>> no
>>> >>>>> banco pode aceitar um zero, como no exemplo velocidade de um
>>> >>>>> veiculo...
>>> >>>>>
>>> >>>>> Acho muito melhor vc deixar (nesses casos) o tipo no flex como
>>> >>>>> object pq?
>>> >>>>> pq caso vc esteja usando Integer no Java o resultado pode ir nulo.
>>> >>>>>
>>> >>>>> 2009/10/21 Frederico Lellis <[email protected]>
>>> >>>>>>
>>> >>>>>> Bom dia Eduardo,
>>> >>>>>>
>>> >>>>>> Vou colar uma resposta dada pelo Mario que tive sobre o mesmo
>>> >>>>>> assunto.
>>> >>>>>>
>>> >>>>>>
>>> >>>>>> "Ola Frederico.... cara.. ja tive muito essas encheçoes de saco do
>>> >>>>>> BlazeDS... vc tem 4 formas de resolver isso:
>>> >>>>>>
>>> >>>>>> 1) No setter do seu id, vc pode verificar se o valor passado no
>>> >>>>>> argumento for 0 (zero), entao sete-o para null.
>>> >>>>>>
>>> >>>>>> 2) Caso vc nao queira "poluir" suas entidades com essa validacao
>>> >>>>>> chata, vc poderá validar isso nas suas classes de servicos.
>>> >>>>>> Qnd vc receber uma entidade com id == 0, entao sete-a para null. É
>>> >>>>>> a
>>> >>>>>> mesma coisa da solução anterior, só mudamos de lugar nao mais no
>>> >>>>>> setter da entidade, mas agora fazer na classe de servico antes de
>>> >>>>>> passar o seu objeto para seu dao ( receio q esteja usando algum
>>> >>>>>> ORM -
>>> >>>>>> i.e hibernate).
>>> >>>>>>
>>> >>>>>>
>>> >>>>>> Essas duas solções funcionam, mas podem ser um pouco "chatas" uma
>>> >>>>>> vez
>>> >>>>>> q se terá SEMPRE q fazer o "if (entidade.getId == 0)" ...
>>> >>>>>> Entao se o programador esquecer de fazer isso em algum momento, já
>>> >>>>>> era! Além de tornar a pratica repetitiva, está sujeita a falhas.
>>> >>>>>>
>>> >>>>>> Agora... vou falar as outras duas formas.... prepare-se para
>>> >>>>>> imergir
>>> >>>>>> no mundo BlazeDS (yes! Imersão BlazeDS.. hehe)
>>> >>>>>>
>>> >>>>>>
>>> >>>>>> Seguinte.. 98% dos usuarios java/flex que usam BlazeDS mal
>>> >>>>>> conhecem
>>> >>>>>> sua estrutura, por isso se perdem com essas coisas.
>>> >>>>>> Oq vou dizer aqui vi pouca gente usar, lá vai.
>>> >>>>>>
>>> >>>>>>
>>> >>>>>> 3) Criar seu fork do BlazeDS:
>>> >>>>>> Baixe o source do BlazeDS, abra a classe Amf3Input.java e
>>> >>>>>> sobrescreva
>>> >>>>>> o metodo read(), inserindo o seguine trecho de codigo:
>>> >>>>>>
>>> >>>>>> @Override
>>> >>>>>> public Object readObject() throws ClassNotFoundException,
>>> >>>>>> IOException {
>>> >>>>>>    Object value = super.readObject();
>>> >>>>>>    if (value instanceOf Double && ((Double).value).isNaN()){
>>> >>>>>>        value = null;
>>> >>>>>>    }
>>> >>>>>>
>>> >>>>>>    return value;
>>> >>>>>> }
>>> >>>>>>
>>> >>>>>>
>>> >>>>>> Muita atenção para esse trecho: ((Double).value).isNaN())
>>> >>>>>> Isso significa que se o Flex me mandar um NaN (Nota a Number) vou
>>> >>>>>> converte-lo para null, e nao para 0 (zero) como é o procedimento
>>> >>>>>> normal.
>>> >>>>>> É aí q está o segredo da serialização de numeros (long / int)
>>> >>>>>> entre Fx
>>> >>>>>> <=> Java!
>>> >>>>>>
>>> >>>>>> Alterada a classe, compile o BlazeDS e utilize sua versao propria.
>>> >>>>>>
>>> >>>>>>
>>> >>>>>>
>>> >>>>>> 4) (A forma que EU uso)
>>> >>>>>> O BlazeDS é flexível a ponto de eu criar meu proprio Adapter
>>> >>>>>> (classe
>>> >>>>>> responsavel por invocar as suas classes de serviço no Java).
>>> >>>>>> Entao, oq eu faço é extender a classe JavaAdapter e sobreescrever
>>> >>>>>> o
>>> >>>>>> método invoke()
>>> >>>>>> Nesse ponto vc tem acesso aos parametros (de entrada e saída) de
>>> >>>>>> serialização.
>>> >>>>>> Com isso em maos, vc pode usar Reflexao para validar/alterar os
>>> >>>>>> valores q chegam do Flex (e os q vao tb).
>>> >>>>>>
>>> >>>>>> Assim fica mais generico, e bem mais reaproveitavel.
>>> >>>>>>
>>> >>>>>>
>>> >>>>>> Espero ter ajudado.
>>> >>>>>>
>>> >>>>>> Abraços."
>>> >>>>>>
>>> >>>>>>
>>> >>>>>> Eu implementei do lado do java os checks, mas no seu caso voce
>>> >>>>>> tera
>>> >>>>>> que implementar a solução número 4 ou 3.
>>> >>>>>>
>>> >>>>>> espero ter ajudado.
>>> >>>>>>
>>> >>>>>> obs: caso voce venha a fazer a solução numero 4, disponibiliza a
>>> >>>>>> classe aqui para o grupo?
>>> >>>>>>
>>> >>>>>> abraços.
>>> >>>>>>
>>> >>>>>>
>>> >>>>>>
>>> >>>>>> 2009/10/21 Eduardo Rodrigues <[email protected]>:
>>> >>>>>> >
>>> >>>>>> > Bom dia pessoal,
>>> >>>>>> >
>>> >>>>>> > Andei lendo e testando e o quando tenho um objeto Number nulo no
>>> >>>>>> > lado
>>> >>>>>> > do flex o comportamento é que ele é serializado para o valor
>>> >>>>>> > default
>>> >>>>>> > no java.
>>> >>>>>> > Digamos que eu mapeie um Integer no java e um Number no flex,
>>> >>>>>> > quando o
>>> >>>>>> > number está nulo ele vai 0 pro java, mesmo sendo Integer um
>>> >>>>>> > wrappper
>>> >>>>>> > que poderia ser perfeitamente serializado para null.
>>> >>>>>> > Em aplicações que o valor 0 é um valor significativo e nulo é a
>>> >>>>>> > ausência de valor este comportamento não é desejado.
>>> >>>>>> > Ex:
>>> >>>>>> > Lançamento de notas de provas escolares.
>>> >>>>>> > O aluno quer saber quando sua nota não foi lançada (nulo) ou se
>>> >>>>>> > ele
>>> >>>>>> > tirou 0.
>>> >>>>>> >
>>> >>>>>> > Como vocês costumam tratar este tipo de caso? Eu realmente não
>>> >>>>>> > quero
>>> >>>>>> > criar um boolean do tipo "valor lançado" pois isto é muito
>>> >>>>>> > anti-natural no meu ponto de vista.
>>> >>>>>> >
>>> >>>>>> > Estou usando BlazeDA + java 5+
>>> >>>>>> >
>>> >>>>>> > Obrigado!
>>> >>>>>> >
>>> >>>>>> > >
>>> >>>>>> >
>>> >>>>>>
>>> >>>>>>
>>> >>>>>>
>>> >>>>>> --
>>> >>>>>> --
>>> >>>>>> ******************************************************
>>> >>>>>>
>>> >>>>>> Frederico Lellis de Albuquerque
>>> >>>>>> Analista Desenvolvedor Java/Flex Pleno.
>>> >>>>>> Graduado Em Ciência da Computação
>>> >>>>>> [email protected]
>>> >>>>>>
>>> >>>>>> ******************************************************
>>> >>>>>>
>>> >>>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>> --
>>> >>>>> Horus Augustus C. C. Lima
>>> >>>>>
>>> >>>>> Sagarana Tech
>>> >>>>> Mobile +55(85)8842.4402
>>> >>>>> Desk +55(85)3304.6530
>>> >>>>> [email protected]
>>> >>>>> http://www.sagaranatech.com
>>> >>>>>
>>> >>>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>> --
>>> >>>> Mario Junior
>>> >>>> Enterprise Java / Flex Architectures
>>> >>>> Adobe Certified Expert Flex 3 with AIR
>>> >>>>
>>> >>>> Sofshore Informática
>>> >>>> http://www.sofshore.com.br
>>> >>>> +55 (48) 3337 2003
>>> >>>> Rua Pastor Willian Richard Schisler Filho 452 sl 102, 88034-100
>>> >>>> Itacorubi
>>> >>>> Florianopolis SC Brasil
>>> >>>
>>> >>>
>>> >>>
>>> >>> --
>>> >>> Mario Junior
>>> >>> Enterprise Java / Flex Architectures
>>> >>> Adobe Certified Expert Flex 3 with AIR
>>> >>>
>>> >>> Sofshore Informática
>>> >>> http://www.sofshore.com.br
>>> >>> +55 (48) 3337 2003
>>> >>> Rua Pastor Willian Richard Schisler Filho 452 sl 102, 88034-100
>>> >>> Itacorubi
>>> >>> Florianopolis SC Brasil
>>> >>>
>>> >>> >
>>> >>>
>>> >>
>>> >> >
>>> >>
>>> >
>>> >
>>> >
>>> > --
>>> > --
>>> > ******************************************************
>>> >
>>> > Frederico Lellis de Albuquerque
>>> > Analista Desenvolvedor Java/Flex Pleno.
>>> > Graduado Em Ciência da Computação
>>> > [email protected]
>>> >
>>> > ******************************************************
>>> >
>>> > >
>>> >
>>>
>>>
>>
>>
>>
>> --
>> Mario Junior
>> Enterprise Java / Flex Architectures
>> Adobe Certified Expert Flex 3 with AIR
>>
>> Sofshore Informática
>> http://www.sofshore.com.br
>> +55 (48) 3337 2003
>> Rua Pastor Willian Richard Schisler Filho 452 sl 102, 88034-100 Itacorubi
>> Florianopolis SC Brasil
>
>
>
> --
> Mario Junior
> Enterprise Java / Flex Architectures
> Adobe Certified Expert Flex 3 with AIR
>
> Sofshore Informática
> http://www.sofshore.com.br
> +55 (48) 3337 2003
> Rua Pastor Willian Richard Schisler Filho 452 sl 102, 88034-100 Itacorubi
> Florianopolis SC Brasil
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para [email protected]
Para sair da lista, envie um email em branco para 
[email protected]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---

Responder a