Axis2 - Webservice exception

9 respostas
sapobomba

Fala galera,

Estou fazendo um webservice exemplo (little exemplo :smiley: ) e está ocorrendo a seguinte exception:
No Client:

org.apache.axis2.AxisFault: teste.dyna.server.Objeto
	at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:486)
	at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:343)
	at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:389)
	at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:211)
	at org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
	at teste.dyna.server.LittleStub.getRetorno(LittleStub.java:208)
	at teste.dyna.server.LittleClient.liitleGetRetorno(LittleClient.java:34)
	at teste.dyna.server.LittleClient.main(LittleClient.java:19)

E no server a seguinte exception, ao fazer a chamada:

Exception occurred while trying to invoke service method getRetorno
org.apache.axis2.AxisFault: teste.dyna.server.Objeto
	at org.apache.axis2.AxisFault.makeFault(AxisFault.java:417)
	at org.apache.axis2.engine.DefaultObjectSupplier.getObject(DefaultObjectSupplier.java:29)
	at org.apache.axis2.databinding.utils.BeanUtil.deserialize(BeanUtil.java:345)
	at org.apache.axis2.databinding.utils.BeanUtil.processObject(BeanUtil.java:655)
	at org.apache.axis2.databinding.utils.BeanUtil.ProcessElement(BeanUtil.java:603)
	at org.apache.axis2.databinding.utils.BeanUtil.deserialize(BeanUtil.java:535)
	at org.apache.axis2.rpc.receivers.RPCUtil.processRequest(RPCUtil.java:153)
	at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:188)
	at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:98)
	at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40)
	at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageRec

No servidor, possuo a seguinte classe, que é encarregada de retornar minhas chamadas do ws:

package teste.dyna.server;
public class Little {
	public Objeto getRetorno( Objeto obj ) {
		Random r = new Random();
		int rand = r.nextInt();
		Objeto out = new Objeto( obj.getKey(), obj.getValor() + rand );
		System.out.println( "retorno obj: " + obj.getKey() + " - " + obj.getValor()  + " valor: " + rand );
		return out;
	}
	public Objeto getUmRetorno( Integer numero ) {
		Objeto o = new Objeto( "chave1", numero.doubleValue() + 50 );
		System.out.println( "getUmRetorno obj: " + o.getKey() + " - " + o.getValor() + " valor original: " + numero.intValue() );
		return o;
	}
}

Minha classe POJO objeto é a seguinte:

package teste.dyna.server;
public class Objeto {
	private String key;
	private double valor;
	
	public Objeto( String s, double d ) {
		key = s;
		valor = d;
	}
	public String getKey() {
		return key;
	}
	public void setKey(String key) {
		this.key = key;
	}
	public double getValor() {
		return valor;
	}
	public void setValor(double valor) {
		this.valor = valor;
	}
}

Minha classe client:

public class LittleClient {
	private static String endereco = "http://192.168.10.12/axis2/services/Little";	
    public static void main(String[] args) {
        try {
        	LittleClient lc = new LittleClient();
        	lc.liitleGetRetorno();
        	//lc.liitleGetUmRetorno();
        	
       } catch (Exception e) {
           e.printStackTrace();
       }
    }
    
    public void liitleGetRetorno() throws RemoteException {
    	LittleStub stub = new LittleStub( endereco );   	
    	LittleStub.Objeto obj = new LittleStub.Objeto();
    	obj.setKey( "key4" );
    	obj.setValor( 15 );
    	LittleStub.GetRetorno retorno = new LittleStub.GetRetorno();
    	retorno.setObj( obj );
    	LittleStub.GetRetornoResponse resp = stub.getRetorno( retorno );
    	System.out.println( "Resultado: " +resp.get_return().getKey() + " - " + resp.get_return().getValor() );
    }

    public void liitleGetUmRetorno() throws RemoteException {
    	LittleStub stub = new LittleStub( endereco );
    	
    	LittleStub.GetUmRetorno getUm = new LittleStub.GetUmRetorno();
    	getUm.setNumero( 150 );
    	
    	LittleStub.Objeto ob = stub.getUmRetorno( getUm ).get_return();
    	System.out.println( ob.getValor() );
    }   

}

Ao chamar o metodo liitleGetRetorno(); no qual passo um Objeto para o ws gera as exceptions que acima mostrei. Porém na minha outra chamada ( liitleGetUmRetorno(); ) onde passo um número inteiro e é retornado um Objeto, funciona perfeitamente.
Alguém aí tem alguma idéia de qual é o problema?

Ja tentei de tudo, mas ate agora não consegui descobrir qual é o problema.

:x

9 Respostas

nebal.metz

Tua classe Objeto, tenta:

public class Objeto implements Serializable

:slight_smile:

sapobomba

Fala nebal

Tentei cara, mas também não deu…

Só mudei isto:

public class Objeto implements Serializable {
	private static final long serialVersionUID = 1L;
...
}

Você sabe se não é algo com assincrono e sincrono?
Implementar a classe CallbackHandler e tal?

Já tentei também mas não teve jeito…

:?

abraço

jgbt

Sua classe Objeto precisa ser mapeada para um tipo do axis. Tipos nativos do java(int, String…) sao mapeados automaticamente.
Vc fez isso?
Abra o descritor do WS e confirme isso.

[]´s

sapobomba

Fala aih meu

Seguinte para gerar o aar eo JSDL, bem como as classe stub e callback, eu usei um plug-in pro eclipse que baixei no site de apache - axis2.

Tipo, no caso no meu outro metodo onde eu passo o integer e ele me retorna um Objeto, funciona.

Mas no outro onde eu passo um Objeto e retorno um Objeto não funciona. Isso que acho estranho.

Teoricamente o descritor deveria estar ok, certo?

Obrigado

sapobomba

Seria isso jgbt?

Tirei do meu wsdl

<xs:complexType name="Objeto">
        <xs:sequence>
            <xs:element minOccurs="0" name="key" nillable="true" type="xs:string"/>
            <xs:element minOccurs="0" name="valor" type="xs:double"/>
        </xs:sequence>
    </xs:complexType>

abraço

sapobomba

Sucesso negrada!

O problema é que o seguinte, na minha classe Objeto onde tenho o construtor que passo os valores ja quando faço a instancia

public Objeto( String s, double d ) {
		key = s;
		valor = d;
	}

Não sei pq cargas d’agua, da esse erro estranho quando faço a passagem do meu Objeto para o WS. Fiz o seguinte: tirei esse construtor e seto os parametros 1 de cada vez, e desse modo funcionou.

Apareceu meu Sys out!

abraço e valeu pela atenção :wink:

jgbt

Bom, não conheço Axis2 e não posso dar uma olhada nele agora, mas no Axis1.x vc teria um arquivo wsdd onde teria esse mapeamento, tipo alguma coisa assim:

&lt;typeMapping xmlns:ns="http://ws.com.br" qname="ns:Pessoa" type="java:br.com.ws.Pessoa" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle=""/&gt;

como sua exception ta estourando nessa classe BeanDeserializerFactory, pode ser alguma coisa relacionada, mas como disse poss estar viajando, talvex no axis2 tenha mudado.
Coloque todo ostackTrace da exception p/ nos darmos uma olhada.

[]´s

jgbt

sapobomba:
Sucesso negrada!

O problema é que o seguinte, na minha classe Objeto onde tenho o construtor que passo os valores ja quando faço a instancia

public Objeto( String s, double d ) {
		key = s;
		valor = d;
	}

Não sei pq cargas d’agua, da esse erro estranho quando faço a passagem do meu Objeto para o WS. Fiz o seguinte: tirei esse construtor e seto os parametros 1 de cada vez, e desse modo funcionou.

Apareceu meu Sys out!

abraço e valeu pela atenção :wink:


Sim, seu objeto precisa seguir o padrão JavaBean, que diz que vc precisa ter um construtor sem parametros.
Se vc so adicionar esse construtor mantendo o outro ja deve funciona… faz um teste.

[]´s

grunfeldt

Opa, blz pessoal!

Estou tendo o mesmo erro que foi solucionado pelos amigos acima.
A solução deles foi deixar apenas o construtor padrão e os parametros serem inseridos depois por sets, imagino eu.

Bom, só que eu preciso deixar os parametros da minha função!
Eles são importantes para validar a utilização do método em questão.

Eu já fiz o teste de não passar nada, deixa-los nulos e funciona,
mas quando coloco os meus parametros…Erro!

Os parametros são 2 Strings e um objeto VO meu.

Se alguém souber sobre isso agradeço muito!
Abraços

Criado 4 de março de 2008
Ultima resposta 28 de jul. de 2009
Respostas 9
Participantes 4