Axis2: 用Axis2的0配置方式实现第一个WebService(1)
来源:互联网 发布:淘宝客服开头语 编辑:程序博客网 时间:2024/05/29 09:13
第一种:用Axis2的0配置方式实现第一个WebService
(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方式调用
(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
- Axis2: 用Axis2的0配置方式实现第一个WebService(1)
- Axis2(1):用POJO实现0配置的WebService
- Axis2实现0配置的WebService
- WebService大讲堂之Axis2(1):用POJO实现0配置的WebService
- WebService大讲堂之Axis2(1):用POJO实现0配置的WebService
- WebService大讲堂之Axis2(1):用POJO实现0配置的WebService
- WebService学习之Axis2(1):用POJO实现0配置的WebService
- WebService大讲堂之Axis2(1):用POJO实现0配置的WebService
- WebService大讲堂之Axis2(1):用POJO实现0配置的WebService
- WebService大讲堂之Axis2(1):用POJO实现0配置的WebService
- WebService(入门--大讲堂)之Axis2(1):用POJO实现0配置的WebService
- WebService大讲堂之Axis2(1):用POJO实现0配置的WebService
- WebService之Axis2(1):用POJO实现0配置的WebService
- WebService大讲堂之Axis2(1):用POJO实现0配置的WebService
- WebService大讲堂之Axis2(1):用POJO实现0配置的WebService(转载)
- WebService大讲堂之Axis2(1):用POJO实现0配置的WebService
- WebService大讲堂之Axis2(1):用POJO实现0配置的WebService
- WebService大讲堂之Axis2(1):用POJO实现0配置的WebService
- 万事开头难
- Linux混杂设备驱动
- Android Loop MessageQune Message Handler 相关知识详解
- C++ 实现 设计模式 系列
- 现在是悲伤的心情
- Axis2: 用Axis2的0配置方式实现第一个WebService(1)
- 鼠标划过的动态效果,JQUERY:display:none
- C++ fill和fill_n函数用法介绍和比较
- 越狱研究点滴---ARC下dealloc过程及.cxx_destruct的探究
- C++游戏之透明贴图(四)
- ListView控件和如何向ListView控件添加数据适配器
- 为什么析构函数常常声明为虚函数
- SQL Server 优化存储过程的七种方法
- 三星NOTE3 N900 刷机