J2EE web service开发(一) 映射数组复杂类型
创始人
2024-04-04 09:01:01
0

之所以把数组类型在调用web service中作为参数的实现郑重的记录下来,实在是因为数组在j2ee web service的实现不是一件容易的问题。至少用Jboss的j2ee web service实现时是这样. 好象网上关于web service的比较深入一点的资料比较少,关于j2ee web service的资料就更少了. 这里只记录了符合WS — I BP 标准的SOAP四种消息传递模式中的RPC/Literal消息传递模式。这个请参考书籍《j2ee web service 高级编程》一书。该书也只能是参考了,只是介绍了web service的理论实现及一点jax-rpc 的API,并且还有蛮多印刷错字。虽然jax-rpc API的目标之一就是为了在各种java 的web service实现技术中提供一个便携的手段,然而各种j2ee服务器的web service技术还是有些差别的,这个还是造成了程序不能直接在各种j2ee服务器之间毫无修改的移植。在 apache的axis实现中,数组作为参数传递根本不值一提,借助工具很方面的就可以实现。

但是在jboss中的ws实现中确不是一件便利的事情。因为郁闷了很久,发点牢骚:)具体实现:

作为J2EE web service服务实现的类必须实现java.rmi.Remote的接口:

  1. package array;   
  2. import java.rmi.Remote;   
  3. import java.rmi.RemoteException;   
  4. public interface CountUser extends Remote {   
  5.   public int countUser(User[] user) throws RemoteException;   
  6. }   

具体实现远程接口的类:

  1. package array;   
  2. public class CountUserImpl implements CountUser {   
  3.     public int countUser(User[] user){   
  4.         for(int i=0;i   
  5.             System.out.println("name "+user[i].getName()+"  phone  "+ user[i].getPhone()+ " birthday "+user[i].getBirthDay());   
  6.         }   
  7.         return user.length;   
  8.     }   
  9. }   

作为数组参数传递的类:

  1. package array;   
  2. import java.util.Date;   
  3. public class User {   
  4.     private String name;   
  5.     private String phone;   
  6.     private Date birthDay;   
  7.     public User() {   
  8.     }   
  9.     public User(String name,String phone,Date birthDay){   
  10.         this.name=name;   
  11.         this.phone=phone;   
  12.         this.birthDay=birthDay;   
  13.     }   
  14.     public void setName(String name) {   
  15.         this.name = name;   
  16.     }   
  17.     public void setPhone(String phone) {   
  18.         this.phone = phone;   
  19.     }   
  20.     public void setBirthDay(Date birthDay) {   
  21.         this.birthDay = birthDay;   
  22.     }   
  23.     public String getName() {   
  24.         return name;   
  25.     }   
  26.     public String getPhone() {   
  27.         return phone;   
  28.     }   
  29.     public Date getBirthDay() {   
  30.         return birthDay;   
  31.     }   
  32. }   

使用Jboss_Home/bin 下的wstools工具生成布署j2ee web service 必须的三个文件,jax-rpc映射文件,web服务描述器文件,以及wsdl文档用于wstools工具的配置文件jboss-config.xml类容如下:

  1. < ?xml version="1.0" encoding="UTF-8"?>   
  2. < configuration xmlns="http://www.jboss.org/jbossws-tools"   
  3.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  4.    xsi:schemaLocation="http://www.jboss.org/jbossws-tools http://www.jboss.org/jbossws-tools/schema/jbossws-tool_1_0.xsd"   
  5.   < java-wsdl>   
  6.   < service  name="ServiceBeanInterface1" style="rpc"   endpoint="array.ServiceBeanInterface1"/>   
  7.       < namespaces target-namespace="http://array" type-namespace="http://array"/>   
  8.      < mapping file="ServiceBeanInterface1.xml"/>   
  9.      < webservices servlet-link="ServiceBeanInterface1"/>        
  10. < /java-wsdl>   
  11. < /configuration>   

使用 wstools -cp array.CountUser -config jboss-config.xml 命令可以生成布署web服务所需的三个文件。另外还得在web.xml文件中把CountUser接口作为servlet发布

  1. < servlet>   
  2.   < display-name>CountUser Servlet< /display-name>   
  3.   < servlet-name>CountUser< /servlet-name>   
  4.   < servlet-class>array.CountUserImpl< /servlet-class>   
  5. < /servlet>   
  6. < servlet-mapping>   
  7.   < servlet-name>CountUser< /servlet-name>   
  8.   < url-pattern>/CountUser< /url-pattern>   
  9. < /servlet-mapping>   
  10. < servlet-mapping>   
  11.   < servlet-name>CountUser   
  12.   < url-pattern>/services/*   
  13. < /servlet-mapping>   

仅仅是这样倒也算很容易了,但是wstools工具并不能在映射文件中正确实现User[]的映射。因此还需要手工添加如下代码以实现User[] 到xml之间的映射。   

  1. < java-xml-type-mapping>   
  2. < java-type>array.User[]< /java-type>   
  3. < root-type-qname xmlns:typeNS='http://array'>typeNS:User.Array< /root-type-ame>   
  4. < qname-scope>complexType< /qname-scope>   
  5. < /java-xml-type-mapping>   

打包成war文件,并且布署。J2EE web service服务端的实现就完成了。使用的Jboss版本4.04 。

【编辑推荐】

  1. 实现数据库表字j2ee应用
  2. J2ee简介
  3. J2EE应用服务器的现状与发展趋势
  4. J2ee学习经验和流程
  5. 快速开发EJB和J2EE Web Applic

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...