加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 22:59:17 所属栏目:安全 来源:网络整理
导读:第一种:用Axis2的0配置方式实现第一个WebService 首先下载Axis2 1.4.1版,解压: (1)axis2-1.4.1-bin: 二进制包,包含Axis2需要的所有jar文件,示例以及其它一些相关文件。但在这个发行包中只包含了addresses mar和soapmontior mar两个模板,其它模块单独

第一种:用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安装目录>webappsaxis2WEB-INpojo目录中,如果pojo目录不存在,建立这个目录;
在以下目录C:tomcatapache-tomcat-7.0.47webappsaxis2WEB-INFpojo新建文件:
public class SimpleService{
public String getGreeting(String name){
return "Holle" + name;
}

public int getPrice(){
return new java.util.Random().nextInt(1000);
}
}
在cmd中进入C:tomcatapache-tomcat-7.0.47webappsaxis2WEB-INFpojo目录,运行以下命令编译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:Axis21.4.1axis2-1.4.1-binaxis2-1.4.1 (2)在cmd中执行以下命令自动生成Web Service代码: ? ? ? ? ? %AXIS2_HOME%binwsdl2java -uri http://localhost:8080/axis2/services/SimpleService?wsdl -p client -s -o E:Axis2home 其中,-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%binaxis2server.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 就可以看到结果。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读