本文轉載自:http://blog.csdn.net/bestcxx/article/details/52434817
如果還沒有接觸過axis,可以先看入門文章
axis1-myeclipse/eclipse-入門級別-資源、流程、常見問題
0、首先在myeclipse中新建一個web項目 webserviceAxis1
1、爲項目 webserviceAxis1 引入 axis1 必須的幾個jar包
2、創建實體類 TheUser.java 注意需要序列化即實現接口Serializable,這對於在webservice 中傳遞實體類型是必須的
TheUser.java 的內容如下
- package com.demo.model;
- import java.io.Serializable;
- public class TheUser implements Serializable {
- /**
- * 提供序列化編號,遠程調用時要用到
- */
- private static final long serialVersionUID = -971720598087640397L;
- private String username;
- private int age;
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- @Override
- public String toString() {
- // TODO Auto-generated method stub
- return "username="+username+" ;age="+age;
- }
- }
3、然後是編寫webservice要發佈的方法所在的類 TheUserWsddAction.java
TheUserWsddAction.java 的代碼如下:
- package com.demo.action;
- import java.util.ArrayList;
- import java.util.LinkedHashMap;
- import java.util.List;
- import java.util.Map;
- import javax.xml.registry.infomodel.User;
- import com.demo.model.TheUser;
- /**
- * 提供webservice方法
- * 將操作各種複雜的數據類型
- * @author WuJieJecket
- *
- */
- public class TheUserWsddAction {
- /**
- * 提供一個簡單類型的方法,便於比對
- * @param username
- * @return
- */
- public String getEasyEg(String username){
- return "You write "+username;
- }
- /**
- * webservice中僅返回一個實體類型
- * @param username
- * @param age
- * @return TheUser
- */
- public TheUser getTheUser(String username,int age){
- TheUser theu=new TheUser();
- theu.setUsername(username);
- theu.setAge(age);
- return theu;
- }
- /**
- * webservice中返回 List<TheUser> 類型
- * @param username
- * @param length
- * @return List TheUser
- */
- public List<TheUser> getTheUserList(String username,int size){
- List<TheUser> theuserlist=new ArrayList<TheUser>();
- for(int i=0;i<size;i++){
- TheUser tuser=new TheUser();
- tuser.setUsername(username+size);
- tuser.setAge(i);
- theuserlist.add(tuser);
- }
- return theuserlist;
- }
- /**
- * webservice中返回 User[]數據 類型
- * @param username
- * @param length
- * @return User[]
- */
- public TheUser[] getTheUserGroup(String username,int length){
- TheUser[] usergroups =new TheUser[length];
- for(int i=0;i<length;i++){
- TheUser tuser=new TheUser();
- tuser.setUsername(username+length);
- tuser.setAge(i);
- usergroups[i]=(TheUser) tuser;
- }
- return usergroups;
- }
- /**
- * webservice中返回 Map<String,TheUser>數據 類型
- * @return
- */
- public Map<String,TheUser> getTheUserMap(){
- Map<String, TheUser> theusermap=new LinkedHashMap<String, TheUser>();
- TheUser tusera=new TheUser();
- TheUser tuserb=new TheUser();
- tusera.setAge(20);
- tuserb.setAge(20);
- tusera.setUsername("namea");
- tuserb.setUsername("nameb");
- theusermap.put("tusera", tusera);
- theusermap.put("tuserb", tuserb);
- return theusermap;
- }
- }
4、爲了把webservice服務發佈出去,我們需要修改項目的web.xml 的內容,具體參考
http://blog.csdn.net/bestcxx/article/details/52300248 中的
8、在自己的項目中使用WSDD方式發佈webservice服務,如其所言
如果你還記得axis 這個項目,把他的web.xml文件找出來,複製裏面的內容,替換掉helloworld的web.xml
(頭部可以保留編碼格式<?xml version="1.0"
encoding="UTF-8"?>,內部的AdminServlet可以註釋掉,儘管沒有啥影響)
這裏我把我的項目的文件貼出來,如果你看的看上面的文章,可以直接複製粘貼到你的web.xml文件中
- <?xml version="1.0" encoding="ISO-8859-1"?>
- <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web
- Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
- <web-app>
- <display-name>Apache-Axis</display-name>
- <listener>
- <listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class>
- </listener>
- <servlet>
- <servlet-name>AxisServlet</servlet-name>
- <display-name>Apache-Axis Servlet</display-name>
- <servlet-class>
- org.apache.axis.transport.http.AxisServlet
- </servlet-class>
- </servlet>
- <servlet>
- <servlet-name>SOAPMonitorService</servlet-name>
- <display-name>SOAPMonitorService</display-name>
- <servlet-class>
- org.apache.axis.monitor.SOAPMonitorService
- </servlet-class>
- <init-param>
- <param-name>SOAPMonitorPort</param-name>
- <param-value>5001</param-value>
- </init-param>
- <load-on-startup>100</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>AxisServlet</servlet-name>
- <url-pattern>/servlet/AxisServlet</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>AxisServlet</servlet-name>
- <url-pattern>*.jws</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>AxisServlet</servlet-name>
- <url-pattern>/services/*</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>SOAPMonitorService</servlet-name>
- <url-pattern>/SOAPMonitor</url-pattern>
- </servlet-mapping>
- <!-- uncomment this if you want the admin servlet -->
- <session-config>
- <!-- Default to 5 minute session timeouts -->
- <session-timeout>5</session-timeout>
- </session-config>
- <!-- currently the W3C havent settled on a media type for WSDL;
- http://www.w3.org/TR/2003/WD-wsdl12-20030303/#ietf-draft
- for now we go with the basic 'it's XML' response -->
- <mime-mapping>
- <extension>wsdl</extension>
- <mime-type>text/xml</mime-type>
- </mime-mapping>
- <mime-mapping>
- <extension>xsd</extension>
- <mime-type>text/xml</mime-type>
- </mime-mapping>
- <welcome-file-list id="WelcomeFileList">
- <welcome-file>index.jsp</welcome-file>
- <welcome-file>index.html</welcome-file>
- <welcome-file>index.jws</welcome-file>
- </welcome-file-list>
- </web-app>
5、編寫 wsdd 文件,目錄是WEB-INF 目錄下
其實只需要一個加載服務的wsdd和一個去處服務的wsdd即可,我這裏有4個是自己做其他實驗用的(名字什麼不重要,必須是wsdd結尾)。
我做的一個實驗是看在一個wsdd文件中是否可以同時發佈兩個service方法,所以添加了一個HelloWorldWSDD.java
HelloWorldWSDD.java 的內容如下
- package com.demo.action;
- /**
- * Axis1
- * WSDD發佈webservice 測試
- * @author WuJieJecket
- *
- */
- public class HelloWorldWSDD {
- /**
- * 方法1
- * param String name
- * return "your name is "+name
- */
- public String getName(String name){
- return "Your name is "+name;
- }
- /**
- * 方法2
- * param int age
- * return age+10
- */
- public int getAge(int age){
- return 10+age;
- }
- }
然後是wsdd 文件
deployall.wsdd
- <?xml version="1.0" encoding="UTF-8"?>
- <deployment xmlns="http://xml.apache.org/axis/wsdd/"
- xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
- <service name="HelloWorldWSDD" provider="java:RPC">
- <parameter name="className" value="com.demo.action.HelloWorldWSDD" />
- <!-- 指定方法名暴露 -->
- <parameter name="allowedMethods" value="getName" />
- <parameter name="scope" value="request" />
- </service>
- <service name="TheUserWsddAction" provider="java:RPC">
- <parameter name="className" value="com.demo.action.TheUserWsddAction" />
- <!-- * 代表所有的方法都暴露 -->
- <parameter name="allowedMethods" value="*" />
- <parameter name="scope" value="request" />
- <!-- 這裏的urn:TheUser和new QName("urn:TheUser", "TheUser")這裏是對應的 -->
- <beanMapping qname="myNSD:TheUser" xmlns:myNSD="urn:TheUser" languageSpecificType="java:com.demo.model.TheUser"/>
- </service>
- </deployment>
undeploy.wsdd
- <undeployment xmlns="http://xml.apache.org/axis/wsdd/">
- <service name="HelloWorldWSDD"/>
- <service name="TheUserWsddAction"/>
- </undeployment>
6、啓動服務,爲了更爲真實的實現那種效果,我把目前的項目打了war包,丟到了本地的tomcat服務器
然後在DOS環境中執行wsdd服務加載的命令-注意項目名和端口號
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -l http://localhost:8080/webserviceAxis1/servlet/AxisServlet deployall.wsdd
然後訪問一下,看發佈是否成功
http://localhost:8080/webserviceAxis1/services
如下就成功了
7.生成客戶端代碼,還是再DOS環境下運行
D:\tomcat7\webapps\webserviceAxis1\WEB-INF>Java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java http://localhost:8080/webserviceAxis1/services/TheUserWsddAction?wsdl
8、將客戶端代碼複製到另外的一個項目中,同時需要引入那8個jar包
你會發現,相較而言,多了一個TheUser.java 當然這個類的位置你是可以自己決定的
因爲本次發佈的webservice方法含有複雜的返回類型
然後對代碼做一點更改,即報錯的地方有兩種
一個是 TheUser_pkg.TheUser 改爲TheUser
另一個是org.apache.xml.xml_soap.MapItem.class;改爲 Map.class
9.最後是測試類
TheAxis1Test.java
- import java.rmi.RemoteException;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import javax.xml.namespace.QName;
- import javax.xml.rpc.ParameterMode;
- import javax.xml.rpc.ServiceException;
- import localhost.webserviceAxis1.services.TheUserWsddAction.TheUser;
- import localhost.webserviceAxis1.services.TheUserWsddAction.TheUserWsddActionService;
- import localhost.webserviceAxis1.services.TheUserWsddAction.TheUserWsddActionServiceLocator;
- import org.apache.axis.client.Call;
- import org.apache.axis.client.Service;
- import org.apache.axis.encoding.XMLType;
- import org.apache.axis.encoding.ser.BeanDeserializerFactory;
- import org.apache.axis.encoding.ser.BeanSerializerFactory;
- import org.junit.Ignore;
- import org.junit.Test;
- public class TheAxis1Test {
- private static final String url="http://localhost:8080/webserviceAxis1/services/TheUserWsddAction";
- /**
- * 最簡單的,入參爲一個 string , 反參爲一個 string
- * @throws ServiceException
- * @throws RemoteException
- */
- @Test
- //@Ignore
- public void testgetEasyEg() throws ServiceException, RemoteException{
- //獲取Service 對象-創建服務
- Service service=new Service();
- //通過 Service 對象獲取遠程調用對象Call-創建調用句柄
- Call call=(Call) service.createCall();
- //設置遠程調用樁-設置請求地址
- call.setTargetEndpointAddress(url);
- //設置遠程操作方法名
- /**
- * 設置調用的方法和方法的命名空間;
- * 因爲這裏是手動發佈到webroot目錄下的,所以命名空間和請求地址一致
- * 當然null也可以,因爲本身它就沒有設置命名空間,一般方法的命名空間是
- * 包名倒寫組成,如com.hoo.service,ns=http://service.hoo.com
- * getSayHello 是要調用的方法名
- */
- call.setOperationName(new QName(null,"getEasyEg"));
- //設置參數,執行遠程方法
- String result=(String)call.invoke(new Object[]{"Jecket"});
- System.out.println(result);
- }
- /**
- * 入參爲 String,int
- * 反參爲 TheUser
- * @throws ServiceException
- * @throws RemoteException
- */
- /**
- * @throws ServiceException
- * @throws RemoteException
- */
- /**
- * @throws ServiceException
- * @throws RemoteException
- */
- @Test
- //@Ignore
- public void testgetTheUser() throws ServiceException, RemoteException{
- //獲取Service 對象-創建服務
- Service service=new Service();
- //通過 Service 對象獲取遠程調用對象Call-創建調用句柄
- Call call=(Call) service.createCall();
- //設置遠程調用樁-設置請求地址
- call.setTargetEndpointAddress(url);
- //這裏的QName的ns和wsdd文件中的對應
- QName qn = new QName("urn:TheUser", "TheUser");
- //這裏是將對象序列化和反序列化的配置
- call.registerTypeMapping(TheUser.class, qn, BeanSerializerFactory.class, BeanDeserializerFactory.class);
- //設置要調用的方法的名字
- call.setOperationName("getTheUser");
- /*
- * 這裏客戶端和服務器端共用一個User,在實際開發中
- * 客戶端和服務器端在不同的機器上,所以User對象可能不一樣
- * 需要我們根據WebService的wsdl分析對象的屬性
- */
- call.addParameter("username", XMLType.XSD_STRING, ParameterMode.IN);
- call.addParameter("age", XMLType.XSD_INTEGER, ParameterMode.IN);
- call.setReturnClass(TheUser.class);
- TheUser tuser = (TheUser) call.invoke(new Object[] {"Jecket",20});
- System.out.println("你獲取了tuser ,名字是:"+tuser.getUsername()+" 年齡是 "+ tuser.getAge()+" 其他信息 "+tuser.getClass());
- }
- /**
- * 入參爲 String , int
- * 反參爲 List<TheUser>
- * @throws ServiceException
- * @throws RemoteException
- *
- */
- @Test
- //@Ignore
- public void testgetTheUserList() throws ServiceException, RemoteException{
- //獲取Service 對象-創建服務
- Service service=new Service();
- //通過 Service 對象獲取遠程調用對象Call-創建調用句柄
- Call call=(Call) service.createCall();
- //設置遠程調用樁-設置請求地址
- call.setTargetEndpointAddress(url);
- //這裏的QName的ns和wsdd文件中的對應
- QName qn = new QName("urn:TheUser", "TheUser");
- //這裏是將對象序列化和反序列化的配置
- call.registerTypeMapping(TheUser.class, qn, BeanSerializerFactory.class, BeanDeserializerFactory.class);
- //設置要調用的方法的名字
- call.setOperationName("getTheUserList");
- /*
- * 這裏客戶端和服務器端共用一個User,在實際開發中
- * 客戶端和服務器端在不同的機器上,所以User對象可能不一樣
- * 需要我們根據WebService的wsdl分析對象的屬性
- */
- call.addParameter("username", XMLType.XSD_STRING, ParameterMode.IN);
- call.addParameter("age", XMLType.XSD_INTEGER, ParameterMode.IN);
- //設置返回值屬性
- call.setReturnClass(List.class);
- List<TheUser> tus = (List<TheUser>) call.invoke(new Object[] {"Jecket",20});
- for(TheUser tu: tus){
- System.out.println("調用 getTheUserList() 你獲取了tu ,名字是:"+tu.getUsername()+" 年齡是 "+ tu.getAge()+" 其他信息 "+tu.getClass());
- }
- }
- /**
- * 入參爲:String , int
- * 反參爲:數組
- * @throws ServiceException
- * @throws RemoteException
- */
- /**
- * @throws ServiceException
- * @throws RemoteException
- */
- @Test
- //@Ignore
- public void testgetTheUserGroup() throws ServiceException, RemoteException{
- //獲取Service 對象-創建服務
- Service service=new Service();
- //通過 Service 對象獲取遠程調用對象Call-創建調用句柄
- Call call=(Call) service.createCall();
- //設置遠程調用樁-設置請求地址
- call.setTargetEndpointAddress(url);
- //這裏的QName的ns和wsdd文件中的對應
- QName qn = new QName("urn:TheUser", "TheUser");
- //這裏是將對象序列化和反序列化的配置
- call.registerTypeMapping(TheUser.class, qn, BeanSerializerFactory.class, BeanDeserializerFactory.class);
- //設置要調用的方法的名字
- call.setOperationName("getTheUserGroup");
- /*
- * 這裏客戶端和服務器端共用一個User,在實際開發中
- * 客戶端和服務器端在不同的機器上,所以User對象可能不一樣
- * 需要我們根據WebService的wsdl分析對象的屬性
- */
- call.addParameter("username", XMLType.XSD_STRING, ParameterMode.IN);
- call.addParameter("age", XMLType.XSD_INTEGER, ParameterMode.IN);
- //設置返回值屬性
- call.setReturnClass(TheUser[].class);
- TheUser[] tu=(TheUser[]) call.invoke(new Object[] {"Jecket",20});
- for(TheUser tus:tu){
- System.out.println("調用了getTheUserGroup() 方法 ,年齡:"+tus.getAge()+" 姓名:"+tus.getUsername()+" 所屬的類:"+tus.getClass());
- }
- //理解數據的類型
- /*String[] a={"1","2"};
- for(String b:a){
- System.out.println(b);
- }*/
- }
- @Test
- //@Ignore
- public void testgetTheUserMap() throws ServiceException, RemoteException{
- //獲取Service 對象-創建服務
- Service service=new Service();
- //通過 Service 對象獲取遠程調用對象Call-創建調用句柄
- Call call=(Call) service.createCall();
- //設置遠程調用樁-設置請求地址
- call.setTargetEndpointAddress(url);
- //這裏的QName的ns和wsdd文件中的對應
- QName qn = new QName("urn:TheUser", "TheUser");
- //這裏是將對象序列化和反序列化的配置
- call.registerTypeMapping(TheUser.class, qn, BeanSerializerFactory.class, BeanDeserializerFactory.class);
- //設置要調用的方法的名字
- call.setOperationName("getTheUserMap");
- //設置返回值屬性
- call.setReturnClass(Map.class);
- Map<String, TheUser> maps = (Map<String, TheUser>) call.invoke(new Object[]{});
- /*
- TheUser ta=(TheUser)maps.get("tusera");
- TheUser tb=(TheUser)maps.get("tuserb");
- System.out.println("調用了getTheUserMap() 方法 ,年齡:"+ta.getAge()+" 姓名:"+ta.getUsername()+" 所屬的類:"+ta.getClass());
- System.out.println("調用了getTheUserMap() 方法 ,年齡:"+tb.getAge()+" 姓名:"+tb.getUsername()+" 所屬的類:"+tb.getClass());
- */
- //遍歷 Map 的方法
- Iterator it=maps.keySet().iterator();
- while(it.hasNext()){
- TheUser ta=maps.get(it.next());
- System.out.println("調用了getTheUserMap() 方法 ,年齡:"+ta.getAge()+" 姓名:"+ta.getUsername()+" 所屬的類:"+ta.getClass());
- }
- }
- /**
- * 使用webservice客戶端進行調用
- * 返回的對象都是 object
- * @throws ServiceException
- * @throws RemoteException
- */
- @Test
- //@Ignore
- public void testhere() throws ServiceException, RemoteException{
- TheUserWsddActionService tuwas=new TheUserWsddActionServiceLocator();
- localhost.webserviceAxis1.services.TheUserWsddAction.TheUserWsddAction tuwa=tuwas.getTheUserWsddAction();
- String r=tuwa.getEasyEg("nihao");
- System.out.println(r);
- Object[] a=tuwa.getTheUserList("Jecket", 10);
- for(Object ob:a){
- TheUser ta=(TheUser)ob;
- System.out.println("年齡:"+ta.getAge()+" 姓名:"+ta.getUsername()+" 所屬的類:"+ta.getClass());
- }
- }
- }
10、以上的例子入參都是簡單的參數,比如String、int,如果是實體類、list等呢?
本例子爲後續補充,不再贅述發佈過程,只寫出方法和調用方法
被調用的方法代碼:
- /**
- * 入參爲 實體類
- * @param theUser
- * @return
- */
- public TheUser getByTheUser(TheUser theUser){
- return theUser;
- }
- /**
- * 入參爲list類型
- * @param list
- * @return
- */
- public TheUser getByListTheUser(List<TheUser> list){
- return list.get(0);
- }
- /**
- * 入參爲map類型
- * @param map
- * @return
- */
- public TheUser getByMapTheUser(Map<String,TheUser> map){
- return map.get("theUser0");
- }
調用webservice方法的代碼
- /**
- * 入參爲實體類
- * @throws ServiceException
- * @throws RemoteException
- */
- @Test
- //@Ignore
- public void testGetByTheUser() throws ServiceException, RemoteException{
- //獲取Service 對象-創建服務
- Service service=new Service();
- //通過 Service 對象獲取遠程調用對象Call-創建調用句柄
- Call call=(Call) service.createCall();
- //設置遠程調用樁-設置請求地址
- call.setTargetEndpointAddress(url);
- //這裏的QName的ns和wsdd文件中的對應
- QName qn = new QName("urn:TheUser", "TheUser");
- //這裏是將對象序列化和反序列化的配置
- call.registerTypeMapping(TheUser.class, qn, BeanSerializerFactory.class, BeanDeserializerFactory.class);
- //設置要調用的方法的名字
- call.setOperationName("getByTheUser");
- call.addParameter("TheUser", XMLType.XSD_ANYTYPE, ParameterMode.IN);
- //設置返回值屬性
- call.setReturnClass(TheUser.class);
- TheUser theUser=new TheUser();
- theUser.setAge(10);
- theUser.setUsername("jecket");
- TheUser theUser2=new TheUser();
- theUser2 = (TheUser)call.invoke(new Object[]{theUser});
- System.out.println("theUser2.name="+theUser2.getUsername());
- }
- /**
- * 入參爲List類型
- * @throws ServiceException
- * @throws RemoteException
- */
- @Test
- //@Ignore
- public void testGetByListTheUser() throws ServiceException, RemoteException{
- //獲取Service 對象-創建服務
- Service service=new Service();
- //通過 Service 對象獲取遠程調用對象Call-創建調用句柄
- Call call=(Call) service.createCall();
- //設置遠程調用樁-設置請求地址
- call.setTargetEndpointAddress(url);
- //這裏的QName的ns和wsdd文件中的對應
- QName qn = new QName("urn:TheUser", "TheUser");
- //這裏是將對象序列化和反序列化的配置
- call.registerTypeMapping(TheUser.class, qn, BeanSerializerFactory.class, BeanDeserializerFactory.class);
- //設置要調用的方法的名字
- call.setOperationName("getByListTheUser");
- call.addParameter("list", XMLType.XSD_ANYTYPE, ParameterMode.IN);
- //設置返回值屬性
- call.setReturnClass(TheUser.class);
- TheUser theUser=new TheUser();
- theUser.setAge(10);
- theUser.setUsername("jecket");
- List<TheUser> list=new ArrayList<TheUser>();
- list.add(theUser);
- TheUser theUser2=new TheUser();
- theUser2 = (TheUser)call.invoke(new Object[]{list});
- System.out.println("theUser2.name="+theUser2.getUsername());
- }
- /**
- * 入參爲Map類型
- * @throws ServiceException
- * @throws RemoteException
- */
- @Test
- //@Ignore
- public void testGetByMapTheUser() throws ServiceException, RemoteException{
- //獲取Service 對象-創建服務
- Service service=new Service();
- //通過 Service 對象獲取遠程調用對象Call-創建調用句柄
- Call call=(Call) service.createCall();
- //設置遠程調用樁-設置請求地址
- call.setTargetEndpointAddress(url);
- //這裏的QName的ns和wsdd文件中的對應
- QName qn = new QName("urn:TheUser", "TheUser");
- //這裏是將對象序列化和反序列化的配置
- call.registerTypeMapping(TheUser.class, qn, BeanSerializerFactory.class, BeanDeserializerFactory.class);
- //設置要調用的方法的名字
- call.setOperationName("getByMapTheUser");
- call.addParameter("map", XMLType.XSD_ANYTYPE, ParameterMode.IN);
- //設置返回值屬性
- call.setReturnClass(TheUser.class);
- TheUser theUser=new TheUser();
- theUser.setAge(10);
- theUser.setUsername("jecket");
- Map<String,TheUser> map=new HashMap<String,TheUser>();
- map.put("theUser0", theUser);
- TheUser theUser2=new TheUser();
- theUser2 = (TheUser)call.invoke(new Object[]{map});
- System.out.println("theUser2.name="+theUser2.getUsername());
- }
特別需要強調的是,在以實體類作爲入參或者反參的時候,需要將建立的實體類序列化,即實體類是這樣的,implements Serializable
- import java.io.Serializable;
- public class TheUser implements Serializable {
- /**
- * 提供序列化編號,遠程調用時要用到
- */
- private static final long serialVersionUID = -971720598087640397L;
- private String username;
- private int age;
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- @Override
- public String toString() {
- // TODO Auto-generated method stub
- return "username="+username+" ;age="+age;
- }
- }