2008-09-11 7 views
3

Eine einfache Frage, aber könnte jemand Beispielcode angeben, wie jemand einen Web-Service aus dem JBoss Seam-Framework heraus aufrufen und die Ergebnisse verarbeiten könnte?Aufruf eines Web-Service von Seam

Ich muss in der Lage sein, mit einer Suchplattform zu integrieren, die von einem privaten Anbieter zur Verfügung gestellt wird, der seine Funktionalität als Webdienst ausstellt. Also, ich suche nur eine Anleitung, wie der Code für den Aufruf eines bestimmten Web-Service aussehen würde.

(jeder Probe Web-Service kann als Beispiel gewählt werden.)

Antwort

1

Es gibt etwa eine gajillion HTTP-Client-Bibliotheken (Restlet ziemlich viel mehr als das ist, aber ich hatte bereits Code-Snippet für etwas anderes), aber sie sollten alle Unterstützung für das Senden von GET-Anforderungen bieten. Hier ist ein eher weniger Feature-Snippet, das HttpClient von Apache Commons verwendet:

0
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()); 
      } 
     } 
    } 
} 

Dieser Code verwendet Restlet eine Anfrage an Yahoos RESTful-Suchdienst zu machen. Offensichtlich diktieren die Details des von Ihnen verwendeten Webdienstes, wie Ihr Client aussieht.

0
final Response response = new Client(Protocol.HTTP).get(uri); 

Also, wenn ich das richtig verstehen, die über die Linie ist, wo der eigentliche Aufruf an den Webdienst hergestellt wird, mit der Reaktion auf ein geeignetes Format umgewandelt wird und manipulierte nach dieser Zeile.

Angenommen, ich verwende Restlet nicht, wie würde sich diese Zeile unterscheiden?
(Natürlich ist die eigentliche Code Verarbeitung würde auch deutlich unterschiedlich sein, so dass ein gegeben hat.)