J2EE web service开发(一) 映射数组复杂类型

开发 后端
数组在j2ee web service的实现不是一件容易的问题。至少用Jboss的j2ee web service实现时是这样。由此,本文介绍J2EE web service开发中的映射数组复杂类型。

之所以把数组类型在调用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的接口:

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

具体实现远程接口的类:

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

作为数组参数传递的类:

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

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

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

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

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

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

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

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

【编辑推荐】

  1. 实现数据库表字j2ee应用
  2. J2ee简介
  3. J2EE应用服务器的现状与发展趋势
  4. J2ee学习经验和流程
  5. 快速开发EJB和J2EE Web Applic
责任编辑:book05 来源: csdn
相关推荐

2009-06-22 10:59:00

J2EE web se

2009-06-22 10:09:00

J2EE web se

2009-06-22 10:14:00

J2EE web se

2009-06-22 09:56:00

J2EE web se

2009-06-22 10:04:00

J2EE web se

2009-06-22 11:50:00

J2EE Web应用快速开发

2009-06-18 16:13:14

J2EE开发

2009-06-16 13:27:59

Hibernate x

2009-06-23 08:06:46

J2EE体系架构J2EE模型J2EE设计模式

2009-06-10 14:10:23

J2EE学习J2EE是什么

2009-06-10 13:37:06

J2EE可伸缩性J2EE灵活性J2EE维护

2009-06-11 17:06:11

J2EE历史Java EE概述

2009-06-22 17:09:00

J2EE项目开发流程

2009-06-23 16:48:26

J2EE常见问题J2EE平台

2009-06-22 17:05:41

Java EEJava企业应用

2009-06-23 08:12:48

J2EE调用存储过程

2009-06-22 17:34:40

J2EE架构

2009-06-18 15:54:57

J2EE下使用JNDI

2009-06-22 17:20:33

J2EE框架

2009-06-22 16:21:02

J2EE线程
点赞
收藏

51CTO技术栈公众号