axis1发布方式进阶篇

来源:互联网 发布:淘宝最好卖的东西 编辑:程序博客网 时间:2024/05/29 19:24

上一篇文章,HelloImp.java 中 public String sayHello(String name){

}

输入参数,返回参数是基本类型的,若是复杂类型该怎么发布,调用呢?

建议先看下上篇文章,这篇文章说明较少。直接贴上代码

第一步、贴上代码

User.java

[java] view plaincopy
  1. package com.bing.inter.pojo;  
  2.   
  3. public class User implements java.io.Serializable {  
  4.     private Integer id;  
  5.     private String name;  
  6.     private Integer age;  
  7.     public Integer getId() {  
  8.         return id;  
  9.     }  
  10.     public void setId(Integer id) {  
  11.         this.id = id;  
  12.     }  
  13.     public String getName() {  
  14.         return name;  
  15.     }  
  16.     public void setName(String name) {  
  17.         this.name = name;  
  18.     }  
  19.     public Integer getAge() {  
  20.         return age;  
  21.     }  
  22.     public void setAge(Integer age) {  
  23.         this.age = age;  
  24.     }  
  25. }  
UserService.java

[java] view plaincopy
  1. package com.bing.inter;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import com.bing.inter.pojo.User;  
  7.   
  8. public class UserService {  
  9.     public List<User> getUsersByNames(String name){  
  10.         List<User> list=new ArrayList<User>();  
  11.         User u1=new User();  
  12.         User u2=new User();  
  13.         User u3=new User();  
  14.         u1.setName(name);  
  15.         u1.setId(1);  
  16.         u1.setAge(1);  
  17.         u2.setName(name);  
  18.         u2.setId(2);  
  19.         u2.setAge(2);  
  20.         u3.setName(name);  
  21.         u3.setId(3);  
  22.         u3.setAge(3);  
  23.         list.add(u1);  
  24.         list.add(u2);  
  25.         list.add(u3);  
  26.         return list;  
  27.     }  
  28. }  

userWS.wsdd

[html] view plaincopy
  1. <deployment xmlns="http://xml.apache.org/axis/wsdd/"  
  2.     xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">  
  3.     <service name="userWS" provider="java:RPC">  
  4.         <parameter name="className" value="com.bing.inter.UserService"/>  
  5.         <parameter name="allowedMethods" value="*"/>  
  6.         <beanMapping qname="myNSD:User"  xmlns:myNSD="urn:BeanService"   
  7.         languageSpecificType="java:com.bing.inter.pojo.User"/>  
  8.     </service>  
  9. </deployment>  

第二步、发布

userWS.wsdd 复制到%TOMCAT_HOME%/webapps/axis/目录下

把User.class,UserService.class文件按照目录复制到%TOMCAT_HOME%/webapps/axis/WEB-INF/classes目录下

新建一个userWS.bat文件,内容如下

[plain] view plaincopy
  1. set Axis_Lib=C:\axis-1_4\lib     
  2. set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%      
  3. set Axis_Servlet=http://localhost:9080/axis/servlet/AxisServlet      
  4. %Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% userWS.wsdd   
  5. pause  
cd 到%TOMCAT_HOME%/webapps/axis

执行userWS.bat,访问http://localhost:9080/axis/services/userWS?wsdl 是否发布成功。


第三步、测试

[java] view plaincopy
  1. package com.bing.test;  
  2.   
  3. import javax.xml.namespace.QName;  
  4.   
  5. import org.apache.axis.client.Call;  
  6. import org.apache.axis.client.Service;  
  7.   
  8. import com.bing.inter.pojo.User;  
  9.   
  10. public class TestUserClient {  
  11.     public static void main(String[] args){  
  12.         Service service=new Service();  
  13.         String url="http://localhost:9080/axis/services/userWS?wsdl";  
  14.         try {  
  15.             Call call=(Call)service.createCall();  
  16.             call.setTargetEndpointAddress(url);  
  17.             call.setOperation("getUsersByNames");  
  18.               
  19.             //要记住当你的方法需要传入自定义类型的参数或返回自定义类型时,一定要在wsdd文档中注册,在客户端编程时也要注册  
  20.             QName qn = new QName("urn:BeanService""User");  
  21.             call.registerTypeMapping(User.class, qn,  
  22.                             new org.apache.axis.encoding.ser.BeanSerializerFactory(  
  23.                                     User.class, qn),  
  24.                             new org.apache.axis.encoding.ser.BeanDeserializerFactory(  
  25.                                     User.class, qn));  
  26.             //返回结果是List 需要按照以下调用,返回的结果不能直接强制转换成List  
  27.             Object[] oo=(Object[])call.invoke(new Object[]{"大兵哥"});  
  28.             for(int i=0,len=oo.length;i<len;i++){  
  29.                 User u=(User)oo[i];  
  30.                 System.out.println(u.getName());  
  31.             }  
  32.         } catch (Exception e) {  
  33.             e.printStackTrace();  
  34.         }  
  35.     }  
  36. }  
0 0
原创粉丝点击