Pergunta
Uma pergunta simples, mas alguém poderia fornecer um código de exemplo sobre como alguém chamaria um serviço da Web dentro da estrutura do JBoss Seam e processaria os resultados?
Preciso ser capaz de me integrar a uma plataforma de pesquisa fornecida por um fornecedor privado que está expondo sua funcionalidade como um serviço web.Então, estou apenas procurando alguma orientação sobre como seria o código para chamar um determinado serviço da web.
(Qualquer exemplo de serviço da web pode ser escolhido como exemplo.)
Solução
Existem aproximadamente um bilhão de bibliotecas de clientes HTTP (Restlet é um pouco mais do que isso, mas eu já tinha esse trecho de código para outra coisa), mas todas elas devem fornecer suporte para o envio de solicitações GET.Aqui está um trecho com menos recursos que usa HttpCliente do Apache Commons:
HttpClient client = new HttpClient();
HttpMethod method = new GetMethod("http://api.search.yahoo.com/WebSearchService/V1/webSearch?appid=restbook&query=HttpClient");
client.executeMethod(method);
Outras dicas
import org.restlet.Client;
import org.restlet.data.Protocol;
import org.restlet.data.Reference;
import org.restlet.data.Response;
import org.restlet.resource.DomRepresentation;
import org.w3c.dom.Node;
/**
* Uses YAHOO!'s RESTful web service with XML.
*/
public class YahooSearch {
private static final String BASE_URI = "http://api.search.yahoo.com/WebSearchService/V1/webSearch";
public static void main(final String[] args) {
if (1 != args.length) {
System.err.println("You need to pass a search term!");
} else {
final String term = Reference.encode(args[0]);
final String uri = BASE_URI + "?appid=restbook&query=" + term;
final Response response = new Client(Protocol.HTTP).get(uri);
final DomRepresentation document = response.getEntityAsDom();
document.setNamespaceAware(true);
document.putNamespace("y", "urn:yahoo:srch");
final String expr = "/y:ResultSet/y:Result/y:Title/text()";
for (final Node node : document.getNodes(expr)) {
System.out.println(node.getTextContent());
}
}
}
}
Este código usa Restlet para fazer uma solicitação ao serviço de pesquisa RESTful do Yahoo.Obviamente, os detalhes do serviço web que você está usando ditarão a aparência do seu cliente.
final Response response = new Client(Protocol.HTTP).get(uri);
Então, se bem entendi, a linha acima é onde a chamada real para o serviço web está sendo feita, com a resposta sendo convertida para um formato apropriado e manipulada após esta linha.
Supondo que eu não estivesse usando Restlet, qual seria a diferença entre essa linha?
(É claro que o código de processamento real também seria significativamente diferente, então isso é um dado adquirido.)