Axis2: 用Axis2的0配置方式实现第一个WebService(1)

来源:互联网 发布:淘宝客服开头语 编辑:程序博客网 时间:2024/05/29 09:13

第一种:用Axis2的0配置方式实现第一个WebService


首先下载Axis2 1.4.1版,解压:
(1)axis2-1.4.1-bin: 二进制包,包含Axis2需要的所有jar文件,示例以及其它一些相关文件。但在这个发行包中只包含了addresses mar和soapmontior mar两个模板,其它模块单独下载。
(2)axis2-1.4.1-src:源代码
(3)axis2-1.4.1-war:包含Axis2需要的所有jar包,由于Axis2需要依赖Servlet容器运行,因此,在发布程序时,需要将这个war文件再Servlet中发布。例如,将war拷贝Tomcat的webapp目中,当tomcat启动后,会将war文件解压,然后我们可以将要发布的Webservice复制到解压,然后我们可以将要发布的Webservice复制到解压后的目录中的相关子目录。
(4)axis2-1.4.1-docs:参考文件,查找类的相关方法和详细信息

1.实现一个0配置的Web Service步骤:

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

(1)编写一个Web Service类
(2)编译这个Web Service类
(3)将编译生成的class文件直接拷贝到<Tomcat安装目录>\webapps\axis2\WEB-IN\pojo目录中,如果pojo目录不存在,建立这个目录;
在以下目录C:\tomcat\apache-tomcat-7.0.47\webapps\axis2\WEB-INF\pojo新建文件:
public class SimpleService{
public String getGreeting(String name){
return "Holle" + name;
}

public int getPrice(){
return new java.util.Random().nextInt(1000);
}
}
在cmd中进入C:\tomcat\apache-tomcat-7.0.47\webapps\axis2\WEB-INF\pojo目录,运行以下命令编译java文件:javac SimpleService.java
重启tomcat(如果配置了热发布,会自动发布)
http://localhost:8080/axis2/services/SimpleService/getGreeting?param0=bill


2.调用Web Service的3种方法

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

第一种调用方法: 使用Java(RPC)调用Web Service步骤
调用Web Service步骤:
1.创建RPCServiceClient对象
2.创建EndpointReference对象,并指定访问Web Service的URL(不包含wsdl)
3.创建描述WebService方法参数值的Object[]对象;
4.创建描述WebService方法返回值类型的Class[]对象;
5.创建QName对象,并指定要调用的WebService方法;
6.使用RPCServiceClient类的invokeBlocking方法调用WebService方法;invokeBlocking方法采用了同步的方式调用WebService,后面讲异步
注意:invokeBlocking方法返回一个Object []对象,如果是单值,取第一个


在eclipse新建一个工程,新建一个package:client,在包中新建类RPCClient.java。
package client;

import javax.xml.namespace.QName;

import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;

public class RPCClient {
public static void main(String[] args) throws AxisFault {
//第一步1.创建RPCServiceClient对象
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();

//第二步2.创建EndpointReference对象,并指定访问Web Service的URL(不包含wsdl)
EndpointReference targetEPR = new EndpointReference(
"http://localhost:8080/axis2/services/SimpleService"
);
options.setTo(targetEPR);
//第三步3.创建描述WebService方法参数值的Object[]对象;
Object[] opAddEntryArgs = new Object[]{"超人"};

//第四步4.创建描述WebService方法返回值类型的Class[]对象;
Class[] classes = new Class[]{String.class};

//第五步5.创建QName对象,并指定要调用的WebService方法;
//http://ws.apache.org/axis2是命名空间,和wsdl文件里的一样
QName opAddEntry = new QName(
"http://ws.apache.org/axis2",
"getGreeting");
//第六步6.使用RPCServiceClient类的invokeBlocking方法调用WebService方法;
//invokeBlocking方法采用了同步的方式调用WebService,后面讲异步
System.out.println(
serviceClient.invokeBlocking(opAddEntry,
opAddEntryArgs,classes)[0]);

classes = new Class[]{int.class};
opAddEntry = new QName(
"http://ws.apache.org/axis2",
"getPrice");
System.out.println(
serviceClient.invokeBlocking(
opAddEntry,
new Object[]{},
classes)[0]);
}
}


以java application方式运行。

第二种调用方法:  通过services.xml方式调用


第一种调用方法上面通过RPC方式调用Web Service方法的例子相对麻烦。Axis2考虑到这点,为我们提供了一个wsdl2java命令,这个命令可以根据WSDL的内容自动生成调用WebService的客户端Stud类。

(1)配置环境变量:AXIS2_HOME=E:\Axis2\1.4.1\axis2-1.4.1-bin\axis2-1.4.1
(2)在cmd中执行以下命令自动生成Web Service代码:
          %AXIS2_HOME%\bin\wsdl2java -uri http://localhost:8080/axis2/services/SimpleService?wsdl -p client -s -o E:\Axis2\home

其中,-uri指定了WSDL文件的地址(可以是本地路径,也可以是web路径),
-p指定了生成Stub类的包名,
-o指定存放Stub类的目录名。
    新建一个client包,将SimpleServiceStub.java拷贝到client包中。
(3)写一个main方法调用web service
注意:webservice方法的返回值和参数值都封装在相应的类中,例如
getGreeting方法返回值封装在GetGreetingResponse类中,参数封装在
GetGreeting类中。




例子:
package client;
import java.rmi.RemoteException;
public class StubSimpleClient {


public static void main(String[] args) throws RemoteException {
// TODO Auto-generated method stub
SimpleServiceStub stub = new SimpleServiceStub();
SimpleServiceStub.GetGreeting gg = new SimpleServiceStub.GetGreeting();
gg.setParam0("bill");
System.out.println(
stub.getGreeting(gg).local_return
);
System.out.println(
stub.getPrice().local_return
);
}
}

以java application方式运行。

第三种:没有Servlet容器情况下使用Axis2
Axis2提供了一个简单的HTTP服务器,端口8080,
(1)使用如下命令来启动HTTP服务器:%AXIS2_HOME%\bin\axis2server.bat
(2)在浏览器输入:http://localhost:8080/axis2
注意:如果在这个HTTP服务器中发布webservice,并不是将webservice发布到WEB-INF目录中的,而是将webservice放在%AXIS2_HOME%\repository目录中,该目录中与
webservice相关的目录结构与WEB-INF目录类似。


发布例子:
http://localhost:8080/axis2/services


将pojo的例子拷贝到%AXIS2_HOME%\repository,重启http服务器,
然后在浏览器中,再输入:http://localhost:8080/axis2/services
就可以看到结果。


0 0
原创粉丝点击