2010-09-10 15 views
6

Das mag sich wie eine einfache Frage anhören, aber als Anfänger in Webservies und dies ist mein erstes Mal, dass ich es benutze und frage mich deshalb.Wie kann ich komplexe Typen wie Objekte mit Webservices übergeben?

F: Wie kann ich Objekte oder komplexe Typen über Webdienste übergeben? Ich habe einen einfachen Webservice erstellt und gebe String- und Integer-Typen weiter, aber ich bin mir nicht sicher, wie ich Objekte über den Webservice weitergeben kann und daher wird jede Anleitung sehr geschätzt.

Danke.

Antwort

7

Sie müssen nur das Objekt serialisieren (einen Text erstellen) auf der Serviceseite und de-serialze (ein Objekt erneut erstellen) auf der Empfängerseite. Jahrelang war SOAP Standard dafür, aber heute wird JSON beliebter, da es viel weniger Aufwand als SOAP hat.

Wenn Sie SOAP und Java verwenden, können Sie versuchen, GSON von Google, das eine sehr einfach zu bedienende Programmierschnittstelle bietet.

JSON mit Gson:

String jsonized = new Gson().toJson(myComplexObject); 
/* no we have a serialized version of myComplexObject */ 

myComplexObjectClass myComplexObjext = new Gson().fromJson(jsonized, myComplexObjectClass.class); 
/* now we have the object again */ 

Für JSON mit JAX-WS (wir verwenden Apache Axis nicht) haben einen Blick auf diese Starter-Tutorials:

+0

Können Sie zwei Beispiele teilen, eine nach SOAP und andere nach JSON? – Rachel

+0

In welcher Programmiersprache? – heb

+0

Java ist die Sprache, die wir verwenden. – Rachel

0

Sie könnten JSON übergeben oder XML-Serialisierung verwenden, falls erforderlich.

+0

Kannst du mehr auf deinen Punkt eingehen und ein paar Detailerklärungen und ein Beispiel geben, um das Argument zu unterstützen, damit ich das Konzept besser verstehe? – Rachel

3

Wenn Sie erholsame Webdienste verwenden (ich würde Jersey empfehlen, wenn Sie http://jersey.dev.java.net sind), können Sie JAXB annotierte Objekte übergeben. Jersey serialisiert und deserialisiert Ihre Objekte sowohl auf der Client- als auch auf der Serverseite.

Serverseite;

@Path("/mypath") 
public class MyResource 
{ 
    @GET 
    @Produces(MediaType.APPLICATION_XML) 
    public MyBean getBean() 
    { 
     MyBean bean = new MyBean(); 
     bean.setName("Hello"); 
     bean.setMessage("World"); 
     return bean; 
    } 

    @POST 
    @Consumers(MediaType.APPLICATION_XML) 
    public void updateBean(MyBean bean) 
    { 
     //Do something with your bean here 
    } 
} 

Clientseite;

//Get data from the server 
Client client = Client.create(); 
WebResource resource = client.resource(url); 
MyBean bean = resource.get(MyBean.class); 

//Post data to the server 
bean.setName("Greetings"); 
bean.setMessage("Universe"); 
resource.type(MediaType.APPLICATION_XML).post(bean); 

JAXB Bohnen;

@XmlRootElement 
public class MyBean 
{ 
    private String name; 
    private String message; 

    //Constructors and getters/setters here 
} 
+0

@qwerky = Ich benutze nicht 'REST', sondern' SOAP', kannst du ein Beispiel mit 'SOAP' teilen? – Rachel

Verwandte Themen