一、 服务端发布服务
1.1 定义复杂类型:UserBean.java
package service;public class UserBean { ???private String userId; ???private String userName; ???private String passWord;//隐藏getset方法}
1.2 定义服务接口 :UserService.java
package service;import javax.jws.WebParam;import javax.jws.WebResult;import javax.jws.WebService;/** * 这是一个web服务 * @author Administrator * */@WebServicepublic interface UserService { ???/** ????* 获取用户 ????* @return ????*/ ???@WebResult(name = "getUserResult") ???public UserBean getUser(); ???/** ????* 设置用户 ????* @param user ????*/ ???public void setUser(@WebParam(name = "userBean") UserBean user);}
1.3 定义服务实现类
package service;import javax.jws.WebParam;import javax.jws.WebResult;import javax.jws.WebService;@WebService(endpointInterface="service.UserService")public class UserServiceimpl implements UserService { ???@Override ???public UserBean getUser() { ???????UserBean user = new UserBean(); ???????user.setPassWord("123"); ???????user.setUserId("001"); ???????user.setUserName("服务端返回的用户"); ???????return user; ???} ???@Override ???public void setUser(UserBean user) { ???????if (user != null) { ???????????System.out.println("客户端设置的用户=" + user); ???????} ???}}
1.4 发布服务
package publish;import javax.xml.ws.Endpoint;import service.UserServiceimpl;public class TestPublish { ???public static void main(String[] args) { ???????Endpoint.publish("http://localhost:3030/userBean", new UserServiceimpl()); ???????????????System.out.println("发布成功....."); ???}}
二、客户端接受、发送消息到服务端
2.1 用工具生成客户端代码(具体步骤参照上一章)
2.2 发送、接收消息
package test;import java.rmi.RemoteException;import service.UserBean;import service.UserService;import service.UserServiceProxy;public class TestMain { ???public static void main(String[] args) throws RemoteException { ???????????????????????/** ????????* 获取服务端返回的用户 ????????*/ ???????UserService userService=new UserServiceProxy().getUserService(); ???????UserBean user=userService.getUser(); ???????System.out.println(user.getUserId()+"\t"+user.getUserName()); ???????????????????????/** ????????* 客户端设置用户 ????????*/ ???????????????UserBean userbean=new UserBean(); ???????userbean.setUserId("2"); ???????userbean.setUserName("客户端设置的用户"); ???????userbean.setPassWord("123520"); ???????new UserServiceProxy().setUser(userbean); ???????????}}
结果:
- 注意:于普通的 Java 数据类型、JavaBean、List 而言,SOAP 服务可以完全将其处理(序列化与反序列化),这些都没有任何问题,但对于 Map 对象而言,不能再放其他复杂类型。
- 一般来说,参数只传字符串类型,因为web服务可以不同语言调用的,而java复杂类型其他语言可能没有,但是所有语言共有字符串类型。而传递的字符串可以将数据封装成json/xml格式的字符串,然后客户端接收到json/xml格式的字符串再进行解析即可。
(四)输入参数与输出类型为复杂类型的web服务
原文地址:http://www.cnblogs.com/shyroke/p/7655255.html