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