转)Axis 把WSDL生成JAVA类wsdl相关 2010-10-28 14:41:00 阅读13 评论0 字号:大中小 订阅 .
使用Axis 把WSDL生成JAVA类的命令
[java对于WSDL调用,写下备忘]
下载Axis.jar包
java -classpath ".;commons-logging-1.0.4.jar;axis.jar;commons-discovery-0.2.jar;jaxrpc.jar;wsdl4j-1.5.1.jar;saaj.jar;activation.jar;mail.jar" org.apache.axis.wsdl.WSDL2Java -o "abcdefg" http://localhost:4391/WebSite2/Service.asmx?wsdl
参数说明:
-o 为输入目录
生成的文件:
[服务名称].java
[服务名称]Locator.java
[服务名称]Soap.java
[服务名称]SoapStub.java
调用说明:
[服务名称] aa = new [服务名称]Locator();//创建个对象
[服务名称]Soap soap = adcInterface.get[服务名称]Soap();
soap.adc[服务名称](参数);
如:
ADCInterfaceForSI adcInterface = new ADCInterfaceForSILocator();
ADCInterfaceForSISoap soap = adcInterface.getADCInterfaceForSISoap
zt:http://hi.baidu.com/linrw/blog/item/7233d134a9155248251f1436.html
初探WSDL2JAVA工具的使用(转载)
2008-08-21 19:52
初探WSDL2JAVA工具的使用
WSDL(Web Service Define Language)可以把它看成一种接口描述语言,告诉Web Service的调用者如下信息:
Web Service 提供了哪些调用?
这些调用需要什么参数?
返回参数是怎么的(数据格式)
调用的具体位置等等
由于WSDL使用XML语言描述,能够容易的被程序处理。
下面以WSDL2Java为例,介绍一下WSDL的自动处理。
通常WSDL文件包含:
1、类型:定义复合数据类型
2、消息:由类型组合成消息(可以作为下面操作的参数)(疑问?:分为类型和消息,直接放在一个组
为啥不行)
3、操作:其中定义可以调用的操作,每个操作的参数。操作的集合对外呈现一个接口
4、绑定:定义每个操作具体的调用方式,数据的编码方式()
5、服务:对外呈现服务,可以包含多个绑定
6、端口:远程地址
其中,1,2,3被称为逻辑的描述; 4,5,6用来描述具体的服务地址和参数编码方式
介绍完了WSDL,我们看一下WSDL2JAVA的具体如何实现
总体来说,WSDL有两部分功能,客户端Stub(存根)和服务器端Skeleton()的生成。
其中客户端Stub负责,根据用户参数打包成SOAP消息;服务器端Skeleton的生成是可选的,负责具体的类
调用的外包。
先说第一部分,WSDL2JAVA处理WSDL生成前端Stub的过程:
具体而言,又分为如下几个部分:
1、类型定义的转换
把WSDL中类型的定义部分,转化成对应JAVA类。现有WSDL中类型定义如下:(选自Axis帮助)
WSDL2JAVA将会生成如下代码:
public class Phone implements java.io.Serializable {
public Phone() {...}
public int getAreaCode() {...}
public void setAreaCode(int areaCode) {...}
public java.lang.String getExchange() {...}
public void setExchange(java.lang.String exchange) {...}
public java.lang.String getNumber() {...}
public void setNumber(java.lang.String number) {...}
public boolean equals(Object obj) {...}
public int hashCode() {...}
}
我们可以看到,WSDL2JAVA生成了一个新的类和WSDL中定义的类型对应,并且为每个成员定义get和set函
数,还把每个字段的首字母大写。
2、接口
WSDL2JAVA将会生成如下代码:
生成一个接口,对外呈现描述的各个接口。message
代表输入输出参数,生成的代码将把message的各个部分罗列在参数表中。
public interface AddressBook extends java.rmi.Remote {
public void addEntry(String name, Address address) throws java.rmi.RemoteException;
}
具体由
3、绑定
...
WSDL2JAVA将会生成如下代码:
从其父类可以看出,他继承自org.apache.axis.client.Stub和具体实现类。将会把生成相应的
Stub,stub中将把调用转化为SOAP调用,另一面它也继承了具体类的所有接口。
public class AddressBookSOAPBindingStub extends org.apache.axis.client.Stub
implements AddressBook {
public AddressBookSOAPBindingStub() throws org.apache.axis.AxisFault
{...}
public AddressBookSOAPBindingStub(URL endpointURL,
javax.xml.rpc.Service service)
throws org.apache.axis.AxisFault
{...}
public AddressBookSOAPBindingStub(javax.xml.rpc.Service service)
throws org.apache.axis.AxisFault
{...}
public void addEntry(String name, Address address) throws RemoteException
{...}
}
4、服务
将形成一个接口:
public interface AddressBookService extends javax.xml.rpc.Service {
public String getAddressBookAddress();
public AddressBook getAddressBook() throws javax.xml.rpc.ServiceException;
public AddressBook getAddressBook(URL portAddress) throws
javax.xml.rpc.ServiceException;
}
还会产生一个Locator实现上面的接口:
public class AddressBookServiceLocator extends org.apache.axis.client.Service
implements AddressBookService {
...
}
下面是一个具体的调用过程:
public static void main(String [] args) throws Exception {
// 生成一个locator
AddressBookService service = new AddressBookServiceLocator();
// 生成一个具体的生成Service的类
AddressBook port = service.getAddressBook();
// 现在可以调用了
Address address = new Address(...);
port.addEntry("Russell Butek", address);
}
这其中有几个问题:
1、 对应成为一个接口,绑定对应成具体的类实现接口,负责把用户调用转化成SOAP调用,使
用户感觉像本地调用.
使用Axis 把WSDL生成JAVA类的命令
[java对于WSDL调用,写下备忘]
下载Axis.jar包
java -classpath ".;commons-logging-1.0.4.jar;axis.jar;commons-discovery-0.2.jar;jaxrpc.jar;wsdl4j-1.5.1.jar;saaj.jar;activation.jar;mail.jar" org.apache.axis.wsdl.WSDL2Java -o "abcdefg" http://localhost:4391/WebSite2/Service.asmx?wsdl
参数说明:
-o 为输入目录
生成的文件:
[服务名称].java
[服务名称]Locator.java
[服务名称]Soap.java
[服务名称]SoapStub.java
调用说明:
[服务名称] aa = new [服务名称]Locator();//创建个对象
[服务名称]Soap soap = adcInterface.get[服务名称]Soap();
soap.adc[服务名称](参数);
如:
ADCInterfaceForSI adcInterface = new ADCInterfaceForSILocator();
ADCInterfaceForSISoap soap = adcInterface.getADCInterfaceForSISoap
zt:http://hi.baidu.com/linrw/blog/item/7233d134a9155248251f1436.html
初探WSDL2JAVA工具的使用(转载)
2008-08-21 19:52
初探WSDL2JAVA工具的使用
WSDL(Web Service Define Language)可以把它看成一种接口描述语言,告诉Web Service的调用者如下信息:
Web Service 提供了哪些调用?
这些调用需要什么参数?
返回参数是怎么的(数据格式)
调用的具体位置等等
由于WSDL使用XML语言描述,能够容易的被程序处理。
下面以WSDL2Java为例,介绍一下WSDL的自动处理。
通常WSDL文件包含:
1、类型:定义复合数据类型
2、消息:由类型组合成消息(可以作为下面操作的参数)(疑问?:分为类型和消息,直接放在一个组
为啥不行)
3、操作:其中定义可以调用的操作,每个操作的参数。操作的集合对外呈现一个接口
4、绑定:定义每个操作具体的调用方式,数据的编码方式()
5、服务:对外呈现服务,可以包含多个绑定
6、端口:远程地址
其中,1,2,3被称为逻辑的描述; 4,5,6用来描述具体的服务地址和参数编码方式
介绍完了WSDL,我们看一下WSDL2JAVA的具体如何实现
总体来说,WSDL有两部分功能,客户端Stub(存根)和服务器端Skeleton()的生成。
其中客户端Stub负责,根据用户参数打包成SOAP消息;服务器端Skeleton的生成是可选的,负责具体的类
调用的外包。
先说第一部分,WSDL2JAVA处理WSDL生成前端Stub的过程:
具体而言,又分为如下几个部分:
1、类型定义的转换
把WSDL中类型的定义部分,转化成对应JAVA类。现有WSDL中类型定义如下:(选自Axis帮助)
WSDL2JAVA将会生成如下代码:
public class Phone implements java.io.Serializable {
public Phone() {...}
public int getAreaCode() {...}
public void setAreaCode(int areaCode) {...}
public java.lang.String getExchange() {...}
public void setExchange(java.lang.String exchange) {...}
public java.lang.String getNumber() {...}
public void setNumber(java.lang.String number) {...}
public boolean equals(Object obj) {...}
public int hashCode() {...}
}
我们可以看到,WSDL2JAVA生成了一个新的类和WSDL中定义的类型对应,并且为每个成员定义get和set函
数,还把每个字段的首字母大写。
2、接口
WSDL2JAVA将会生成如下代码:
生成一个接口,对外呈现描述的各个接口。message
代表输入输出参数,生成的代码将把message的各个部分罗列在参数表中。
public interface AddressBook extends java.rmi.Remote {
public void addEntry(String name, Address address) throws java.rmi.RemoteException;
}
具体由
3、绑定
...
WSDL2JAVA将会生成如下代码:
从其父类可以看出,他继承自org.apache.axis.client.Stub和具体实现类。将会把生成相应的
Stub,stub中将把调用转化为SOAP调用,另一面它也继承了具体类的所有接口。
public class AddressBookSOAPBindingStub extends org.apache.axis.client.Stub
implements AddressBook {
public AddressBookSOAPBindingStub() throws org.apache.axis.AxisFault
{...}
public AddressBookSOAPBindingStub(URL endpointURL,
javax.xml.rpc.Service service)
throws org.apache.axis.AxisFault
{...}
public AddressBookSOAPBindingStub(javax.xml.rpc.Service service)
throws org.apache.axis.AxisFault
{...}
public void addEntry(String name, Address address) throws RemoteException
{...}
}
4、服务
将形成一个接口:
public interface AddressBookService extends javax.xml.rpc.Service {
public String getAddressBookAddress();
public AddressBook getAddressBook() throws javax.xml.rpc.ServiceException;
public AddressBook getAddressBook(URL portAddress) throws
javax.xml.rpc.ServiceException;
}
还会产生一个Locator实现上面的接口:
public class AddressBookServiceLocator extends org.apache.axis.client.Service
implements AddressBookService {
...
}
下面是一个具体的调用过程:
public static void main(String [] args) throws Exception {
// 生成一个locator
AddressBookService service = new AddressBookServiceLocator();
// 生成一个具体的生成Service的类
AddressBook port = service.getAddressBook();
// 现在可以调用了
Address address = new Address(...);
port.addEntry("Russell Butek", address);
}
这其中有几个问题:
1、 对应成为一个接口,绑定对应成具体的类实现接口,负责把用户调用转化成SOAP调用,使
用户感觉像本地调用.