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.)

Foi útil?

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.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top