Problemas com o flex +java

10 respostas
N

Ola Pessoal, tudo bem?

Bem estou com o seguinte problema, estou desenvolvendo uma aplicação com Java+flex+BlazeDS,

tenho uma classe ClienteVO, que possui os Getters e Setters, e o ClienteDAO, para fazer as transações SQL,
Tenho a classe Controller também.

Bem no flex eu tenho um ServicoCliente VO, que declarei assim:

<s:RemoteObject id="ServicoClienteVO" destination="ServicoClienteVO" fault="FaultServicoCliente(event)">

o mapeamento no remote-config.xml também esta feito,

na hora que eu vou clico em gravar o flex executa este procedimento:

public function gravar_campos():void
			{
				ServicoClienteVO teste = new ServicoClienteVO();
				teste.setNome(ti_nome.text);
				teste.setEndereco(ti_endereco.text);
				teste.setEmail(ti_email.text);
				ServicoJavaCliente.gravarCliente(teste)
}

Mas ele dispara uma tela de erro dizendo que eu estou enviando 3 argumentos, quando o esperado é apenas um. O codigo no Java para gravar o cliente é este:

public boolean gravarCliente(ClienteVO cliente) throws Exception {
		ClienteDAO dao = new ClienteDAO();
		boolean sucesso = dao.incluirCliente(cliente);
		return sucesso;
	}

Então eu não estou entendendo, como três argumentos, se eu deixei todos na variavel teste que é do tipo ClienteVO…

Alguém pode me dar uma luz?

10 Respostas

Chap0l1n

fala Neninho,

podes posta toda o erro? a string de erro mesmo

voce colocou o mapeamento da classe java no seu Vo no flex?

N

o Erro que ocorre é este:

Erro: [RPC Fault faultString=“Cannot invoke method ‘gravarCliente’.” faultCode=“Server.ResourceUnavailable” faultDetail=“3 arguments were sent but 1 were expected.”]

Mapeamento?!?!?

Configurei o remote-config.xml, e criei o remote Object, sendo que o RemoteObject ficou desta forma:

<s:RemoteObject id="ServicoClienteVO" destination="ServicoClienteVO" fault="FaultServicoCliente(event)">
			
		</s:RemoteObject>

Não coloquei nada dentro dele se é a isso que você se refere, e outra coisa que eu não sei se é relevante, tenho outro RemoteObject Configurado, para chamar os metodos na classe controller. Segue como ele esta configurado.

<s:RemoteObject id="ServicoJavaCliente" destination="ServicoJavaCliente" fault="FaultServicoCliente(event)">
			<s:method name="listarCliente" result="ResultadoListaCliente(event)" fault="FaultServicoCliente(event)"/>
			<s:method name="conexao"/> 
			<s:method name="gravarCliente" result="ResultadoGravacao(event)"/>
			<s:method name="excluirCliente" result="ResultadoExclusao(event)"/>
			<s:method name="alterarCliente" result="ResultadoAlteracao(event)"/>
			<s:method name="pesquisarCliente" result="ResultadoPesquisaCliente(event)"/>
		</s:RemoteObject>
Chap0l1n

Fala Neninho,

você colocou isto na sua classe flex?

[RemoteClass(alias = “packagenojava.Teste”)]

N

Ola Bom Dia Chap0l1n,

sei que a duvida é bem newbee, mas onde eu coloco este RemoteClass? Qual a função dele?

Obrigado pela ajuda

Chap0l1n

coloca no início da classe, antes do public class

exemplo:

[Bindable]

[RemoteClass(alias=“vo.clientes”)]

public class clientes {

//mesmos atributos da tua classe java

}
luistiagos

coloca no seu VO do flex… ele serve para mapear seu vo do flex com seu vo do java… ou seja tera que ter o mesmo VO do java no flex… dai coloca em cima dele da diretiva class isto aqui [RemoteClass(alias = “packagenojava.Teste”)]

<s:RemoteObject id="ServicoJavaCliente" destination="ServicoJavaCliente" fault="FaultServicoCliente(event)">  
    <s:method name="listarCliente" result="ResultadoListaCliente(event)" fault="FaultServicoCliente(event)"/>  
    <s:method name="conexao"/>   
    <s:method name="gravarCliente" result="ResultadoGravacao(event)"/>  
    <s:method name="excluirCliente" result="ResultadoExclusao(event)"/>  
    <s:method name="alterarCliente" result="ResultadoAlteracao(event)"/>  
    <s:method name="pesquisarCliente" result="ResultadoPesquisaCliente(event)"/>  
</s:RemoteObject>

dai não precisa desses s:method apenas faça um VO exatamente como esta no java e coloque as diretivas

[Bindable]
[RemoteClass(alias = "packagenojava.Teste")]
 public class Teste {
   //seus atributos
 }

e no seu mxml só coloque isto:

<s:RemoteObject id="ServicoJavaCliente" destination="ServicoJavaCliente" fault="FaultServicoCliente(event)">

com isto é pra funcionar…

N

bem agora eu fui verificar com mais calma o projeto, e vi que ha um pacote services, que acredito eu deve ter sido gerado automaticamente, afinal eu nao criei :D.

Então havia o metodo gravar cliente lah que estava assim:

public function gravarCliente(arg0:String, arg1:String, arg2:String) : mx.rpc.AsyncToken
    {
        var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("gravarCliente");
        var _internal_token:mx.rpc.AsyncToken = _internal_operation.send(arg0,arg1,arg2) ;

        return _internal_token;
    }

Desta maneira imaginei que pudesse ser este o empecilho que estava ocasionando o meu erro, mudei esta função para :

public function gravarCliente(arg0:ClienteVO) : mx.rpc.AsyncToken
	{
		var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("gravarCliente");
		var _internal_token:mx.rpc.AsyncToken = _internal_operation.send(arg0) ;
		
		return _internal_token;
	}

Como mencionado aqui, não se ficou certo, mas criei uma classe ClienteVO.as, que ficou assim:

package
{
	public class ClienteVO
	{
		private int codigo;
		private String nome;
		private String endereco;
		private String email;
		
		public int getCodigo() {
			return codigo;
		}
		public void setCodigo(int codigo) {
			this.codigo = codigo;
		}
		public String getNome() {
			return nome;
		}
		public void setNome(String nome) {
			this.nome = nome;
		}
		public String getEndereco() {
			return endereco;
		}
		public void setEndereco(String endereco) {
			this.endereco = endereco;
		}
		public String getEmail() {
			return email;
		}
		public void setEmail(String email) {
			this.email = email;
		}
		public function ClienteVO()
		{
		}
	}
}

e no mxml deixei assim:

[Bindable]
			[RemoteClass(alias="br.eti.andrei.model.ClienteVO")]
			public class clienteVO{
				int codigo;
				String nome;
				String endereco;
				String email;
			}

Mas continua dando erro :frowning: :?: :frowning:
e o pior de tudo é que é o mesmo erro ainda:

Erro: [RPC Fault faultString=“Cannot invoke method ‘gravarCliente’.” faultCode=“Server.ResourceUnavailable” faultDetail=“3 arguments were sent but 1 were expected.”]

Que errinho chato, estou começando a ficar nervoso com ele… E o pior é que não sei mais o que pode ser…

Alguem tem uma idéia?

R

Erro: [RPC Fault faultString=“Cannot invoke method ‘gravarCliente’.” faultCode=“Server.ResourceUnavailable” faultDetail=“3 arguments were sent but 1 were expected.”]

Esse erro acontece porque você está enviado 3 parametros ao chamar o service no Flex, porém o Java só está esperando um parametro.

N

é isso que eu não estou entendendo, o gravar no flex esta assim:

public function gravar_campos():void
			{
				ClienteVO clienteVO = new ClienteVO();
				clienteVO.setNome(ti_nome.text);
				clienteVO.setEndereco(ti_endereco.text);
				clienteVO.setEmail(ti_email.text);
				ServicoJavaCliente.gravarCliente(clienteVO);
			}

e no java esta assim:

public boolean gravarCliente(ClienteVO cliente) throws Exception {
		ClienteDAO dao = new ClienteDAO();
		boolean sucesso = dao.incluirCliente(cliente);
		return sucesso;
	}

eu não sei aonde estao esses 3 argumentos que ele esta recebendo no flex, pois para mim a apenas um.

Chap0l1n

estranho esse pacote service, nunca utilizei

deve ter algum erro que o compilador não está pegando, já conteceu isso comigo,

sua classe no flex, os atributos não estão declarados corretamente,

tenta assim:

[Bindable]  
   [RemoteClass(alias="br.eti.andrei.model.ClienteVO")]  
   public class clienteVO{  
            var codigo:int;  
            var nome:String;  
            var endereco:String;  
            var email:String;
  
   }

a sua classe está com minuscula no inicio mesmo? seu arquivo está com o mesmo nome?

não deve ser esse o erro principal, tenta mudar isso pra ver se o compilador acha o erro.

abraço!

Criado 22 de julho de 2010
Ultima resposta 26 de jul. de 2010
Respostas 10
Participantes 4