首页 > 学院 > 开发设计 > 正文

Axis1.4框架实现webservice服务器和客户端

2019-11-14 14:50:26
字体:
来源:转载
供稿:网友

一:提前准备

  1. Win7旗舰版, Eclipse,JDK1.6,tomcat6.0,Axis1.4的包。 至于Axis1.4包网上可以下载,如果是在找不到可以留言给我。

二:摘要

将解压后的 axis-1_4/webapps/下的axis 目录考到 %TOMCAT_HOME%/Webapps/ 目录下
启动tomcat后在浏览器里输入 http://localhost:8080/axis 会看到下图所示

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

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(此类不含包名)

 public class SayHello {     public String sayMsg(String name){         return "Hello: "+name;     } }

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

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

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

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

package client;import org.apache.axis.client.Call;import org.apache.axis.client.Service;public class TestClient {    /**     * @see axis框架实现简单的 webService客户端, 读webServicez服务器内容,如果有问题请留言     * @param webUrl 设置调用的wsdl路径, 即访问的路径     * @param method 设置调用的方法名     * @param parameters 设置调用的方法的参数     * @author 邓龙胜(微信simpledls)     * @throws Exception     */    public static void readerWebserviceContent(String webUrl,String method,Object[] parameters) throws Exception {                Service service = new Service();        Call call = (Call) service.createCall();        // 这里是要调用的方法名        call.setOperationName(method);        // 设置调用的wsdl路径, 即访问的路径        call.setTargetEndpointAddress(webUrl);        // parameters 是为方法传递参数, 必须和调用的方法体的参数类型和数量一致        String val = (String) call.invoke(parameters);        System.out.println("这是webservice服务器返回的信息:/n" + val);    }            /**     * @param args     * @throws Exception     */    public static void main(String[] args) throws Exception {        String webUrl = "http://192.168.1.121:8080/axis/SayHello.jws";        String method = "sayMsg";        Object[] parameters= new Object[] { "axis web service" };        TestClient.readerWebserviceContent(webUrl, method, parameters);    }}

 

四:WSDD(Web Service Deployment Descriptor)文件发布Web Service

  1. 为了使大家懂的如何映射实体类,故下文我将用 实体类(javaBean) 作为参数的方式引导大家,那么先在项目中新建一个JavaBean: UserBean.java 代码如下:
package wsaxis.bean;public class UserBean {        private String userName; //姓名    private Integer age;     //年龄     public String getUserName() {        return userName;    }    public void setUserName(String userName) {        this.userName = userName;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    } }

2. 创建一个 MessageService.java 类, 代码如下:

package wsaxis;import wsaxis.bean.UserBean;public class MessageService {     /**     * UserBean 作为参数*/    public String getBeanStr(UserBean bean) {        return "You Name:" + bean.getUserName() + " , You Age:" + bean.getAge();    }}

3. 创建一个 deploy.wsdd 文件, 该文件主要用于生成发布文件 server-config.wsdd ,  在项目中依次点击: new --> other -->file  内容如下:

<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>

上面要注意: value="wsaxis.MessageService" , 这个 MessageService 就是你创建的那个 MessageService.java路径一定不要搞错 !

       type="java:wsaxis.bean.UserBean", 这个 UserBean 就是你创建的那个 UserBean.java路径一定不要搞错 !

4. 创建一个 undeploy.wsdd 文件, 该文件主要用于取消发布 web service , 创建方法同上。 其内容如下

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

5. 将上面写好的两个类已编译好的class文件复制到 %tomcat_home%/axis/WEB-INF/class/ 目录下,(注意:要完整的目录结构复制过来),然后在把两个wsdd文件复制到%tomcat_home%/axis/WEB-INF/ 目录下,打开cmd进入 %tomcat_home%/axis/WEB-INF/ 目录下:

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

java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -p 8080 -s /axis/servlet/AxisServlet deploy.wsdd

java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient –lhttp://localhost:8080/axis/services/MessageService deploy.wsdd

分别用CMD 输入如上命令,如果成功系统会提示如下:

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

(有可能第三条不成功,但是没关系,主要看下 %tomcat_home%/axis/WEB-INF/  目录下是否已经生成 server-config.wsdd 文件) , 如果有此文件 则在浏览器输入

http://localhost:8082/axis/services/MessageService   会看到下图

 

 

已下班 ... 后续继续跟新 !!

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表