之所以把数组类型在调用web service中作为参数的实现郑重的记录下来,实在是因为数组在j2ee web service的实现不是一件容易的问题。至少用Jboss的j2ee web service实现时是这样. 但是在jboss中的ws实现中确不是一件便利的事情。因为郁闷了很久,发点牢骚:)具体实现: 作为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; } 具体实现远程接口的类: package array; public class CountUserImpl implements CountUser { public int countUser(User[] user){ for(int i=0;i<user.length;i++){ System.out.println("name "+user[i].getName()+" phone "+ user[i].getPhone()+ " birthday "+user[i].getBirthDay()); } return user.length; } } 作为数组参数传递的类: 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; } } 使用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./jbossws-tools" xmlns:xsi="http://www./2001/XMLSchema-instance" xsi:schemaLocation="http://www./jbossws-tools http://www./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> 使用 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</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> 仅仅是这样倒也算很容易了,但是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> 打包成war文件,并且布署。服务端的实现就完成了。打包的war文件下载 |
|
来自: nbtymm > 《WebService&SOA》