Skip to content
marloncarvalho edited this page Aug 8, 2012 · 3 revisions

SOAP/XML

Como você já deve saber, temos duas versões do serviço eQuizmo. Uma versão disponibiliza os dados através de REST e outra através de SOAP. Fizemos destas duas formas para que você possa ter à sua disposição dois exemplos de conexão a serviços. Nesta seção, vamos falar sobre como você pode se conectar ao nosso servidor usando o SOAP no Android.

Bibliotecas Externas

Em primeiro lugar, saiba que não existe suporte nativo para SOAP no Android. Neste caso, só lhe resta fazer uma conexão manual e tratar o pacote SOAP que o serviço lhe manda, ou tratar usando o projeto ksoap-android.

No nosso caso, usamos o ksoap-android, pois facilita bastante nossa tarefa. Você pode encontrar mais informações sobre este projeto no link http://code.google.com/p/ksoap2-android/. A utilização deste projeto é bem simples e sugerimos que você leia a documentação deles para entender mais facilmente nosso código.

Onde encontrar o código?

Todos os serviços que usam SOAP estão no pacote br.gov.serpro.quiz.service.soap. Podemos pegar como exemplo a classe CategoryServiceSoap.java. Esta classe se conecta com os nossos servidores para obter informações sobre as categorias de Quiz disponíveis.

Como utilizar?

Abaixo temos o código fonte da classe que citamos logo acima. Observe que criamos um Envelope SOAP através da classe SoapSerializationEnvelope e depois enviamos este envelope para o servidor através de um objeto do tipo HttpTransportSE. Uma vez feito isto, teremos como retorno um Vector de SoapPrimitive, que na verdade é um Vetor de Strings. Estas strings representam os nomes das categorias.

public class CategoryServiceSoap implements CategoryService {

	private static final String NAMESPACE = "http://webservice/";
	private static final String METHOD_NAME = "listCategories";

	@SuppressWarnings("unchecked")
	@Override
	public List<Category> getCategories() {
		final List<Category> result = new ArrayList<Category>();
		final SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
		final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
		envelope.setOutputSoapObject(request);

		try {
			final HttpTransportSE androidHttpTransport = new HttpTransportSE("http://quiz-exmo.rhcloud.com/quiz?wsdl");
			androidHttpTransport.call("", envelope);
			final Vector<SoapPrimitive> vector = (Vector<SoapPrimitive>) envelope.getResponse();
			for (SoapPrimitive nome : vector) {
				result.add(new Category(nome.toString()));
			}
		} catch (Exception e) {
			throw new RuntimeException(e);
		}

		return result;
	}

}

Só fazemos iterar nesse Vetor, obtendo todos os nomes das categorias e criamos objetos do tipo Category, inserindo-os na lista que retornaremos para preenchimento da tela.