Apache AXIS: No deserializer defined for array type

4 respostas
F

Boa tarde pessoal.

Preciso acessar um webservice feito em PHP que já está em uso sendo acessado por diversas aplicações.

Usei o plugin WSDL2Java do eclipse e ele me gerou uma classe com as seguintes propriedades:

[b]package webservices;

public class XDigital  implements java.io.Serializable {

private java.lang.String dig_login;

private byte[] dig_template1;   //Campo Binário

private byte[] dig_template2;   //Campo Binário

private byte[] dig_template3;   //Campo Binário

private byte[] dig_template4;   //Campo Binário

}[/b]

Estou rodando a classe da seguinte forma:

[b]public static void main(String[] args) {
	XDigital[] resultado;

	try {
		WsDigital service = new WsDigitalLocator();			
		WsDigitalPortType atrib = (WsDigitalPortType) service.getwsDigitalPort();
		resultado = atrib.getDigitais();
		System.out.println("Deu certo!!!");			
	} catch (Exception e) {
		System.out.println("Sem chance: " + e.getMessage());
	}
}

[/b]
Porém obtenho uma mensagem:

- Exception:

org.xml.sax.SAXException: No deserializer defined for array type XDigital

at org.apache.axis.encoding.ser.ArrayDeserializer.onStartElement(ArrayDeserializer.java:304)

at org.apache.axis.encoding.DeserializerImpl.startElement(DeserializerImpl.java:428)

at org.apache.axis.encoding.DeserializationContextImpl.startElement(DeserializationContextImpl.java:976)

at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:198)

at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:725)

at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:323)

at org.apache.axis.message.RPCElement.getParams(RPCElement.java:347)

at org.apache.axis.client.Call.invoke(Call.java:2234)

at org.apache.axis.client.Call.invoke(Call.java:2133)

at org.apache.axis.client.Call.invoke(Call.java:1656)

at webservices.WsDigitalBindingStub.getDigitais(WsDigitalBindingStub.java:142)

at principal.Principal.main(Principal.java:34)

Sem chance: ; nested exception is:

org.xml.sax.SAXException: No deserializer defined for array type XDigital

Alguém sabe como resolver esse problema?

Grato,

Fabio

4 Respostas

guilherme.chapiewski

O Axis tem um problema com arrays de tipos não-primitivos.

Você terá que fazer um mapeamento específico para que o Axis consiga ler isso.

Dá uma olhada em http://ws.apache.org/axis/java/user-guide.html#WhatAxisCanNotSendViaSOAP

Sugiro criar um webservice em Java com este objeto XDigital e fazer um mapeamento de beans para ver como o Axis gera o WSDL e o retorno disso. Daí você pode comparar com o que o PHP está fazendo e até modificar o PHP se for o caso.

Abraços,
Guilherme

F

Cara…

Se possível eu trocava o axis pelo Xfire…

http://xfire.codehaus.org

o axis ja me deu mta dorzinha de cabeça e o xfire nao… hehe

guilherme.chapiewski

felipecruz:
Cara…

Se possível eu trocava o axis pelo Xfire…

http://xfire.codehaus.org

o axis ja me deu mta dorzinha de cabeça e o xfire nao… hehe

Apoiado :smiley:

F

Cara, eu instalei o XFire mas ta dando um erro de Encoding, pois meu XML é em Latin1 ( ISO-8859-1 ) e acho que o XFire só suporta UTF-8…

Alguma outra idéia. Preciso mesmo retornar esse objeto para um applet :frowning:

Criado 13 de fevereiro de 2007
Ultima resposta 15 de fev. de 2007
Respostas 4
Participantes 3