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

Axis开发webservice的简单实例(转)

发布时间:2020-12-16 23:45:06 所属栏目:安全 来源:http://ws.apache.org/axis/ 可
导读:本文主要记录Axis开发webservice简单实例的详细过程和步骤: Axis官方网站:http://ws.apache.org/axis/ 可以在官网下载最新1.4的包:axis-bin-1_4.zip 将解压后的axis-1_4webapps下的axis目录考到%TOMCAT_HOME%/Webapps/目录下 启动tomcat后在浏览器里输

本文主要记录Axis开发webservice简单实例的详细过程和步骤:
Axis官方网站:http://ws.apache.org/axis/
可以在官网下载最新1.4的包:axis-bin-1_4.zip
将解压后的axis-1_4webapps下的axis目录考到%TOMCAT_HOME%/Webapps/目录下
启动tomcat后在浏览器里输入http://localhost:8082/axis会看到下图所示(ps:本人的tomcat端口为8082


点击上图中的Validataion链接,页面上会提示已经有的包和缺少的包的信息,根据提示将必须的包下载全,将这些类包复制到 %tomcathome%/webapps/axis/WEB-INF/lib/目录下重新启动tomcat,直到Validation页面中看不到有Error与Warning的提示信息。

如果提示缺少xmlsec.jar(附件提供下载)可以到?http://santuario.apache.org/download.html下载.

Axis支持三种web service的客户端访问方式,分别为:

  • Dynamic Invocation Interface ( DII)
  • Dynamic Proxy方式
  • Stubs方式

PS:看到很多资料将上述方式列为Web Servcie的三种“部署和开发方法,个人觉得有些欠妥

下面介绍axis部署和发布web service的方式:

  • JWS -即时发布
  • WSDD – 定制发布

一、JWS

JWS(Java WebService)是最简单的一种方式。Axis允许把普通Java类的源文件的扩展名改为.jws,然后把它简单的copy到AXIS_HOME下。这
样,Axis 会自动编译.jws文件,并把它自动加入到Java Web Servie的服务中。非常简单和灵活,但是这种方式的缺点是:只能是java源代码,同时类中不能含有包名。具体过程如下

1.用Eclipse或者文本编辑器编写一个java类SayHello.java(此类不含包名)

1 public?class?SayHello{
2
????public?String sayMsg(String name){
3
????????return?"Hello,"+name;
4
????}
5
}

2.将上面的类(SayHello.java)copy到%tomcat_home%/webapps/axis/目录下,只需要把类的源文件(不是class)到这个目录下,重命名为:SayHello.jws

3.打开浏览器输入:http://localhost:8082/axis/SayHello.jws 会看到:


点击上图Click to see the WSDL 的链接,就可以看到生成的wsdl。

4.客户端Dynamic Invocation Interface ( DII)方式 实现如下:

import?org.apache.axis.client.Call;
import?org.apache.axis.client.Service;
?
/**
?* axis client
6
?* @author Michael sun
7
?*/
8
public?class?TestClient {
9
10 ????/**
11
?????* @param args
12
?????* @throws Exception
13
?????*/
14
????public?static?void?main(String[] args)?throws?Exception {
15
????????String wsdlUrl =?"http://localhost:8082/axis/SayHello.jws";
16
????????// String wsdlUrl=”http://localhost:8080/axis/SayHello.jws?wsdl”
17
????????Service s =?new?Service();
18
????????Call call = (Call) s.createCall();
19
????????call.setOperationName("sayMsg");// 这里是要调用的方法名
20
????????call.setTargetEndpointAddress(wsdlUrl);// 设置调用的wsdl
21
????????String val = (String) call.invoke(new?Object[] {?"My Michael Sun"?});
22
????????System.out.println("这是webservice服务器返回的信息:"?+ val);
23
24 }

5.客户端Dynamic Proxy方式 实现如下:

public?interface?SayHelloInterface?extends?java.rmi.Remote {
????public?String sayMsg(String name)?throws?java.rmi.RemoteException;
}
import?java.net.URL;
import?javax.xml.namespace.QName;
import?javax.xml.rpc.Service;
import?javax.xml.rpc.ServiceFactory;
?* test Dynamic Proxy client
public?class?TestProxyClient {
????????String wsdlname =?"http://localhost:8088/axis/SayHello.jws?wsdl";
????????// 服务路径
????????String namespaceUrl =?"http://localhost:8088/axis/SayHello.jws";
????????// 服务名
????????String serviceName =?"SayHelloService";
????????// 服务
????????String portName =?"SayHello";
25
????????// 创建代理对像
26
????????ServiceFactory service = ServiceFactory.newInstance();
27
????????// 创建远程服务
28
????????Service s = service.createService(new?URL(wsdlname),?new?QName(
29
????????????????namespaceUrl,serviceName));
30
31 ????????SayHelloInterface proxy = (SayHelloInterface) s.getPort(new?QName(
32
33 ????????System.out.println(proxy.sayMsg("Blue boy!"));
34
35 }

二、WSDD(Web Service Deployment Descriptor)文件发布Web Service

1.自定义参数bean和server的代码如下:

package?wsaxis.bean;
?* bean
public?class?UserBean {
????private?String userName;
????private?Integer age;
?????* @return the userName
????public?String getUserName() {
????????return?userName;
?????* @return the age
????public?Integer getAge() {
????????return?age;
?????* @param pUserName the userName to set
????public?void?setUserName(String pUserName) {
????????userName = pUserName;
?????* @param pAge the age to set
36
37 ????public?void?setAge(Integer pAge) {
38
????????age = pAge;
39
40 41 package?wsaxis;
import?wsaxis.bean.UserBean;
?* axis server
public?class?MessageService {
?????* getBeanStr
?????* @param bean
?????* @return String
????public?String getBeanStr(UserBean bean) {
????????return?"You Name:"?+ bean.getUserName() +?",You Age:"?+ bean.getAge();
?????* checkUser
????public?String checkUser(UserBean bean) {
????????if?("Michael".equals(bean.getUserName())) {
????????????return?"Michael welcome to axis ";
????????}?else?{
????????????return?bean.getUserName() +?" can't access this ws";
????????}
}

2.deploy.wsdd和undeploy.wsdd文件的编写如下:

deploy.wsdd 文件如下:

WSDD文件描述可参见:http://www.oio.de/axis-wsdd/

<deployment?name="test"?xmlns="http://xml.apache.org/axis/wsdd/"
????xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
??<service?name="MessageService"?provider="java:RPC"?style="rpc"?use="encoded">
????<parameter?name="className"?value="wsaxis.MessageService"/>
????<parameter?name="allowedMethods"?value="*"/>
????????<typeMapping?xmlns:ns1="http://wsaxis.michael.com"?qname="ns1:userBean"
????????????type="java:wsaxis.bean.UserBean"
????????????serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
????????????deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
????????encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
???????/>
??</service>
</deployment>

undeploy.wsdd文件如下:

<undeployment
????xmlns="http://xml.apache.org/axis/wsdd/">
??<!-- Services from MessageService WSDL service -->
??<service?name="MessageService"/>
</undeployment>

3.将上面写好的两个类的class文件复制到%tomcat_home%/axis/WEB-INF/class/目录下,完整的目录结构复制过来,然后在把两个wsdd文件复制到%tomcat_home%/axis/WEB-INF/目录下,打开控制台进入%tomcat_home%/axis/WEB-INF/目录下:

>java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -p 8082 deploy.wsdd?

-s? 参数指定了AxisServlet所在的应用程序路径
>java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -p 8082 -s /axis/servlet/AxisServlet deploy.wsdd?

-l? 参数指定目标应用的URL
>java -Djava.ext.dirs=lib?
org.apache.axis.client.AdminClient?
–lhttp://localhost:8082/axis/services/MessageService deploy.wsdd

这个命令就是发布这个服务,发布成功后在控制台下会有提示:

Processing file deploy.wsdd
<Admin>Done processing</Admin>

同时发布后会在%tomcat_home%/axis/目录下,多了一个server-config.wsdd文件.
在浏览器输入:http://localhost:8082/axis/services/MessageService会看到下图:


4.client的生成方法:

打开控制台进入%tomcat_home%/axis/WEB-INF/目录下:

>java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java -p client http://localhost:8082/axis/services/MessageService?wsdl

会在当前的目录下生成client文件夹,这个目录里文件就是客户端源码。

5.通过WSDD文件卸载发布的webservice:

打开控制台进入%tomcat_home%/axis/WEB-INF/目录下:
>java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient undeploy.wsdd

如果不是默认8080端口需要加上参数-p:
>java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient?-p 8082?undeploy.wsdd

PS:java -Djava.ext.dirs=lib 也可以用java -cp “lib*”

6.客户端Stubs方式实现如下:

查看源代码
打印 帮助
import?org.apache.axis.encoding.ser.BeanDeserializerFactory;
import?org.apache.axis.encoding.ser.BeanSerializerFactory;
import?stubclient.UserBean;
?* test stub client
public?class?TestStubClient {
????????QName qname =?new?QName("http://wsaxis.michael.com",?"user");
????????// 注册这个bean为可序列化的.传递参数
????????call.registerTypeMapping(UserBean.class,qname,
????????????????new?BeanSerializerFactory(UserBean.class,qname),monospace !important;vertical-align:top !important;font-weight:normal !important;color:#000000 !important;font-style:normal !important;text-align:left !important;"> ????????????????new?BeanDeserializerFactory(UserBean.class,qname));
????????// 设置一下调用方法名.
????????call.setOperationName("getBeanStr");
????????// 设置一下这个服务的绝对路径.
????????call.setTargetEndpointAddress(new?URL(
????????????????"http://localhost:8082/axis/services/MessageService?wsdl"));
????????// 实例化一个UserBean,这个UserBean是生成client的UserBean
????????UserBean u =?new?UserBean();
????????u.setAge(28);
????????u.setUserName("Michael");
????????// 通知方法,并返回结果
????????String str = (String) call.invoke(new?Object[] { u });
42
43 ????????System.out.println("web service 返回信息:"?+ str);
44
45 46 47 }

(编辑:李大同)

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

    推荐文章
      热点阅读