如何使用Web服务传递对象等复杂类型?

时间:2010-09-10 15:02:36

标签: java web-services serialization soap soa

这可能听起来像一个简单的问题,但作为Webservies的新手,这是我第一次使用它,所以我怀疑。

问:如何使用Web服务传递对象或复杂类型?我创建了一个简单的Web服务,并传递字符串和整数类型,但我不知道如何使用webservice传递对象,因此任何指导都将受到高度赞赏。

感谢。

3 个答案:

答案 0 :(得分:7)

您只需要在服务端序列化对象(生成文本)并在接收者端反序列化(再次生成对象)。多年来,SOAP是标准配置,但是今天JSON变得越来越流行,因为它的开销比SOAP少得多。

如果使用SOAP和Java,您可以尝试Google的GSON,它提供了一个非常易于使用的编程界面。

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

对于使用JAX-WS的JSON(我们不使用Apache Axis),请查看这些入门教程:

答案 1 :(得分:3)

如果您正在使用restful Web服务(如果您是http://jersey.dev.java.net,我建议使用Jersey),您可以传递JAXB带注释的对象。 Jersey会自动在客户端和服务器端序列化和反序列化您的对象。

服务器端;

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

答案 2 :(得分:0)

如果需要,您可以传递json或使用xmlserialization。