WebService 开发 XFire 传递java对象
1、当WebService 服务器端传过来的是简单的字符串时,我们直接取值就行。但如果传过来的是一个Javabean 对象时,直接取值的话会无法正常解析。这时我们在获取对象,得到对象的属性时,需要使用 getValue()来获取属性的值。
server_xfireClient client = new server_xfireClient();
server_xfirePortType service = client.getserver_xfireHttpPort();
User user = service.getUserInfo(); // 执行后WebService服务器返回User 对象
/*
当WebService 服务器端传过来的是简单的字符串时,我们直接取值就行。但如果传过来的是一个Javabean 对象时,直接取值的话会无法正常解析。这时我们在获取对象,得到对象的属性时,需要使用 getValue()来获取属性的值。
(1、当我们直接取出对象属性的值时:
System.out.println("user--name:" + user.getName() + "==age:"+ user.getAge());
输出打印值:
--------------------------------------------------------------------
user--name:javax.xml.bind.JAXBElement@ff2413==age:javax.xml.bind.JAXBElement@9980d5
--------------------------------------------------------------------
(2、使用getValue()来获取属性的值:
System.out.println("user--name:" + user.getName() .getValue()+ "==age:"+ user.getAge().getValue());
输出打印值:
--------------------------------------------------------------------
user--name:lsxy==age:23
--------------------------------------------------------------------
*/
2、当客户端传递字符串给服务器端时,可以直接传递。但如果将javabean 对象传递给服务器端时就要使用ObjectFactory 来构建对象了,不然也会出现服务器端无法正常解析的现象。
ObjectFactory factory = new ObjectFactory();
User u = factory.createUser();
u.setName(factory.createUserName("EE"));
u.setAge(factory.createUserAge("27"));
service.addUser(u);
或者
ObjectFactory f = new ObjectFactory();
User uu = new User();
uu.setName(f.createUserName("QQ"));
uu.setAge(f.createUserAge("24"));
service.addUser(u);
我们可以发现User 对象的生成可以用WebService客户端自动生成的ObjectFactory 去构建也可以使用自动生成的User 直接new。
但user 对象的属性值却必须使用ObjectFactory 去创建。
查看WebService 自动生成的客户端代码中的User对象类中可以看到如下代码:
public void setName(JAXBElement<String> value) {
this.name = ((JAXBElement<String> ) value);
}
setName 方法的中的参数并不是简单的字符串。
3、当客户端传递List 对象给服务器端时,也需要使用ObjectFactory 去构建数组对象。
ObjectFactory of = new ObjectFactory();
User u1 = new User();
u1.setName(of.createUserName("AA"));
u1.setAge(of.createUserAge("11"));
User u2 = new User();
u2.setName(of.createUserName("BB"));
u2.setAge(of.createUserAge("22"));
User u3 = new User();
u3.setName(of.createUserName("CC"));
u3.setAge(of.createUserAge("33"));
ArrayOfUser aou = of.createArrayOfUser();
aou.getUser().add(u1);
aou.getUser().add(u2);
aou.getUser().add(u3);
String usersString = service.addUsers(aou); //传递数组对象给服务器端
/* 也可以直接使用对象定义数组 */
// ArrayOfUser aou = new ArrayOfUser();
// aou.getUser().add(u1);
// aou.getUser().add(u2);
// aou.getUser().add(u3);
// String usersString=service.addUsers(aou);
在进行WebService 的客户端开发工程中,有一个比较重要的自动生成的对象ObjectFactory 。
PS:具体的开发文档和源代码例子可以在我的资源“WebService之XFire开发文档和代码.rar” 中进行下载参考。