【发布时间】:2011-04-10 18:52:14
【问题描述】:
这听起来像是一个简单的问题,但作为 Webservies 的新手,这是我第一次使用它,所以我提出了疑问。
问:如何使用 Web 服务传递对象或复杂类型?我创建了一个简单的 Web 服务并传递字符串和整数类型,但我不确定如何使用 Web 服务传递对象,因此任何指导都将受到高度赞赏。
谢谢。
【问题讨论】:
标签: java web-services serialization soap soa
这听起来像是一个简单的问题,但作为 Webservies 的新手,这是我第一次使用它,所以我提出了疑问。
问:如何使用 Web 服务传递对象或复杂类型?我创建了一个简单的 Web 服务并传递字符串和整数类型,但我不确定如何使用 Web 服务传递对象,因此任何指导都将受到高度赞赏。
谢谢。
【问题讨论】:
标签: java web-services serialization soap soa
您只需在服务端序列化对象(制作文本)并在接收端反序列化(再次制作对象)。多年来 SOAP 是这方面的标准,但如今 JSON 变得更流行,因为它的开销比 SOAP 少得多。
如果使用 SOAP 和 Java,您可以尝试 Google 的 GSON,它提供了非常易于使用的编程接口。
带有 GSON 的 JSON:
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),请查看以下入门教程:
【讨论】:
如果您使用的是 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 豆;
@XmlRootElement
public class MyBean
{
private String name;
private String message;
//Constructors and getters/setters here
}
【讨论】:
REST,而是SOAP,你能和SOAP分享一个例子吗?
如果需要,您可以传递 json 或使用 xmlserialization。
【讨论】: