-
Notifications
You must be signed in to change notification settings - Fork 14
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.
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.
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.
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.