Web Service学习笔记(3)

来源:互联网 发布:淘宝作图用什么软件 编辑:程序博客网 时间:2024/05/16 15:30

(3)STUB的布署方式(自动生成代理,将代码封装,方便访问)
你要向外提供什么样的服务,可以先写一个interface 来描述它。这个interface 必需继承
自java.rmi.Remote ,而且每个方法必需抛出java.rmi.RemoteException 。本例中的服
务定义为:
package com.eshore;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface PersonManager extends Remote{
 public void addPerson(Person person)throws RemoteException;
 public Person getPerson()throws RemoteException;
}
使用的JAVABean为:
package com.eshore;

public class Person {
 public String name;

 public String sex;

 public int age;

 public Person() {
 }

 public int getAge() {
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public String getSex() {
  return sex;
 }

 public void setSex(String sex) {
  this.sex = sex;
 }

}

使用工具Java2WSDL生成wsdl文件,然后再使用工具WSDL2Java生成STUB。
此种方法功能比较强大,可以使用stub或者前面的方式来访问。
两工具文件内容如下,可以粘贴保存为bat文件直接使用:
Java2WSDl.bat:

=============================================================
@ECHO [*]   此工具是用来将JAVA代码生成WEB SERVICE的WSDL文件的工具
@ECHO [*]   用法如下:
@ECHO [*]   正确成功的安装AXIS
@ECHO ****************************************************************
@ECHO --------------------------命令用法-----------------------------------
@ECHO [*]   将此文件拷至对应的WEB-INF目录下,运行     
@ECHO [*]   参数含义如下
@ECHO [*]   -o,output[WSDL file]指定输出的WSDL文件名。若没有指定,
@ECHO [*]        一个适当的默认WSDL 文件名将被写到当前目录。
@ECHO [*]   -l,location[location]指定Web服务位置的URL。最后的斜线
@ECHO [*]        或反斜线后的名字是服务端口(service port)的名字
@ECHO [*]        (除非被s选项覆盖)。服务端口的地址位置属性被
@ECHO [*]        分配为该指定值
@ECHO [*]   -P,portTypeName指定portType元素的名字,如果未指定,
@ECHO [*]        则使用classofportType的名字
@ECHO [*]   -b,bindingName[name] 指定binding元素的名字。若未指定,
@ECHO [*]        使用值--–servicePortName + "SOAPBinding"
@ECHO [*]   -n,namespace [target namespace]指定生成的WSDL的目标名称空间
@ECHO [*]   -y,style[argument]指示WSDL文档的风格,有DOCUMENT,RPC
@ECHO [*]        和WRAPPED 三种。默认为RPC。
@ECHO [*]     (注意:p和后边的参数之间不能有空格,这是本人的经验)
@ECHO ***************************************************************
@ECHO -----------------按照以上规则对命令进行修改使用----------------------
@ECHO -------将此文件拷至WEB-INF下,将要成生WSDL的包与类同时拷至此目录下

@ECHO -----设置输入文件的名称
set OPFN=PersonManager.wsdl

@ECHO -----设置设置PORTTYPE的名称
set PORT_TYPE=PersonManagerPortType

@ECHO -----设置soap绑定的名称
set SOAP_BD=PersonManagerSoapBinding

@ECHO -----设置WEB SERVICE的地址
set WBS_L=http://localhost:8080/axis/services/PersonManager

@ECHO -----设置命名空间
set WBS_NS=http://localhost:8080/axis/services/PersonManager

@ECHO -----设置使用WEB SERVICE方式
set WB_STYLE=rpc

@ECHO -----设置执行的类名
set WB_CLASS=com.eshore.PersonManager

java -Djava.ext.dirs=lib org.apache.axis.wsdl.Java2WSDL -o%OPFN% -P%PORT_TYPE% -b%SOAP_BD% -l%WBS_L% -n%WBS_NS% -y%WB_STYLE%

%WB_CLASS%
@ECHO [*]命令执行完毕   
pause

=========================================================

WSDL2Java.bat文件如下:

=========================================================

@ECHO [*]   此工具是用来将WSDL文件生成java文件的工具
@ECHO [*]   用法如下:
@ECHO [*]   正确成功的安装AXIS

 

@ECHO *********************************************************************
@ECHO --------------------------命令用法-----------------------------------
@ECHO [*]   将此文件拷至对应的WEB-INF文件目录下,将WSDL文件也放此处,运行     
@ECHO [*]   参数含义如下
@ECHO [*]   -p,package,包名,对应的类的包
@ECHO [*]   -c,对应生成的接口实现类,实现服务的类名
@ECHO [*]   -s,指服务器端
@ECHO *********************************************************************

@ECHO 设置包名(对应生成访问类的包名)
set PACK_CLASS=com.eshore

 

@ECHO 设置实现类的名称(如需要,将注释放开,将后面内容拷到命令行)
@ECHO -c%IMPL_CLASSNAME%
@ECHO set IMPL_CLASSNAME=com.eshore.PersonManagerImpl


@ECHO 设置WSDL文件的名子(可以直接对应网上的WSDL的文件URL)
set WSDL_NAME=PersonManager.wsdl

java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java -s -p%PACK_CLASS% %WSDL_NAME%

pause

===========================================================
发布deploy.wsdd为server-config.wsdd的文件deploy.bat内容为:

===========================================================
@ECHO 将deploy.wsdd布署为server-config.wsdd,需将此文件放于WEB-INF下运行
@ECHO /WEB-INF/lib下放需要的类包文件
@ECHO 设置布署的路径
set Axis_Servlet=http://10.17.33.46:8089/CFMSS/servlet/AxisServlet

java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -l%Axis_Servlet% deploy.wsdd

pause

===========================================================

使用以上工具生成的JAVA代码的几个类分别是:

执行完上述命令将产生如下文件:
deploy.wsdd undeploy.wsdd
部署(反部署)描述符文件

Person.java
和前面自己写的一样,用哪个都可以
PersonManagerPortType.java
和接口PersonManager 一样,就是名字变了。本文中用这个类。
PersonManagerImpl.java
实现PersonManagerPortType 的类。具体的逻辑还得自己去填充。
PersonManagerPortTypeService.java
用于获取PersonManagerPortType ,是一个接口
PersonManagerPortTypeServiceLocator.java
PersonManagerPortTypeService 的实现
PersonManagerSoapBindingStub.java
方便客户端调用服务的Stub 类

 

参考资料:

(1)Xml,Soap,Wsdl,WebService: http://www.w3schools.com/

(2)Apache Axis: http://ws.apache.org/axis/