2010-09-10 3 views
6

Это может звучать как простой вопрос, но как новичок в Webservies, и это мой первый раз, используя его, и поэтому я задаю свои сомнения.Как передать сложные типы, такие как объекты с помощью Webservices?

Вопрос: Как передать объекты или сложные типы с помощью веб-служб? Я создал простой веб-сервис и передаю строковые и целочисленные типы, но я не уверен, как передать объекты с помощью webservice, и поэтому любое руководство будет высоко оценено.

Спасибо.

ответ

7

Вам нужно всего лишь сериализовать объект (сделать текст) на стороне обслуживания и де-сериализовать (сделать объект снова) со стороны приемника. В течение многих лет SOAP был стандартом для этого, но сегодня JSON становится все более популярным, поскольку он имеет намного меньше накладных расходов, чем SOAP.

Если вы используете SOAP и Java, вы можете попробовать GSON от Google, что обеспечивает очень простой в использовании интерфейс программирования.

JSON с 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 */ 

Для JSON с JAX-WS (мы не используем Apache Axis), посмотрите на эти стартер-учебники:

+0

Можете ли вы поделиться двумя примерами этого, одним из которых является SOAP и другие JSON? – Rachel

+0

В каком языке программирования? – heb

+0

Java - это язык, который мы используем. – Rachel

0

Вы можете передать json или использовать xmlserialization, если необходимо.

+0

Можете ли вы подробнее рассказать о своей точке, дать некоторые подробные объяснения и примеры, чтобы поддержать аргумент, чтобы я лучше понял концепцию? – Rachel

3

Если вы используете спокойные веб-сервисы (я бы порекомендовал Джерси, если вы http://jersey.dev.java.net), вы можете передать аннотированные объекты JAXB. Джерси автоматически сериализует и десериализует ваши объекты как на стороне клиента, так и на стороне сервера.

Сторона сервера;

@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 
    } 
} 

Сторона клиента;

//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 bean;

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

    //Constructors and getters/setters here 
} 
+0

@qwerky = Я не использую 'REST', но' SOAP', вы можете поделиться примером с 'SOAP'? – Rachel