KSoap2 Android e .NET

Como todos sabem, a MS tem alguma iniciativas que fogem dos padrões. Um deles é WS e SOAP.
Para se trabalhar com Android e WS em .NET utilizamos a Ksoap2, onde é necessário informar ao envelope que está trabalhando com .NET. Sendo assim a lib irá remover algumas propriedades dos elementos do envelope.
Caso esse atributos forem enviados, por exemplo na versão 11, teremos então uma falha de recebimento do envelope no WS .NET.
Assim como essa padronização diferenciada da MS, o KSoap2 em Android também apresenta alguns BUGs, tal como trabalhar com objetos complexos e enviar ao WS .NET que o atributo “anytype” não deverá ser enviada.

Procurei em vários forums(Stackoverflow meu favorito) alguma forma para resolver esse problema, não a encontrei e então resolvi sobrescrever o método createRequestData da classe HttpTransportSE, resolvendo assim esse bug para remover atributos indesejados.

A finalidade abaixo é somente remover o atributo “anytype” de seu envolope, mas necessitante de excluir outros atributos, basta modificar o código abaixo.

public class CustomHttpSE extends HttpTransportSE {
	...
	
	@Override
    protected byte[] createRequestData(SoapEnvelope envelope)
            throws IOException {
        byte[] envelopeReturned = super.createRequestData(envelope);

        String requestObject = new String(envelopeReturned);
        String pattern = "i:type=\"d:anyType\"";

        SoapSerializationEnvelope soapEnvelope = (SoapSerializationEnvelope) envelope;
        if (soapEnvelope.dotNet) {
            if (requestObject.contains(pattern)) {
                requestObject = requestObject.replace(pattern, "");
            }
        }
        
        return requestObject.getBytes();
    }
}

Espero ter ajudado,
André Rezende

Anúncios

2 comentários sobre “KSoap2 Android e .NET

  1. Ola amigo, ajudou bastante.
    Faz 2 dias que estou apanhando para isto.
    Obrigado.

  2. Também tive este problema.
    No meu caso resolvi setando o implicitTypes do envelope para true.
    envelope.implicitTypes = true;

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s