Как я могу передавать сложные типы, такие как объекты, используя веб-сервисы? - PullRequest
6 голосов
/ 10 сентября 2010

Это может звучать как простой вопрос, но я новичок в Webservies, и я впервые пользуюсь им, поэтому я сомневаюсь.

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

Спасибо.

Ответы [ 3 ]

7 голосов
/ 10 сентября 2010

Вам нужно только сериализовать объект (сделать текст) на стороне обслуживания и десериализовать (сделать объект снова) на стороне получателя. В течение многих лет стандарт 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) взгляните на эти стартовые уроки:

3 голосов
/ 10 сентября 2010

Если вы используете отдыхающие веб-службы (я бы порекомендовал Джерси, если вы 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 голосов
/ 10 сентября 2010

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

...