MyEclipse 搭建webservice (axis1.4)

0 引言 

以前都是做javaweb的 最近因工作需要 接触了webservice

关于什么事webservice,与web的区别,soap,跟http的区别,asix1和asix2的区别,为什么不用json 等等等等 这里就不细谈了。等以后有机会会好好探讨下 要不会在心里留下阴影。

这里主要讲的是如何用myeclipse搭建axis1.4版本的webservice  并进行测试 。

网上看了很多 但版本过多没找到合适的 所以在这里把自己弄得小demo拿了出来

好 闲话不说了 上代码

1 搭建项目

在MyEclipse中 新建 Web项目 项目名 wbsDemo

1.0 最终结构

1.1导入jar包

1.2jar包说明

axis.jar               SOAP引擎包
commons-discovery-0.2.jar    用来发现、查找和实现可插入式接口,提供一些一般类实例化、单件的生命周期管理的常用方法
commons-logging-1.1.1.jar    日志包
jaxrpc.jar             Axis运行所需要的组件包
wsdl4j-1.6.2.jar           用来解析服务的WSDl文件

1.3修改web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0"  xmlns="http://java.sun.com/xml/ns/javaee"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"><servlet>
    <display-name>Apache-Axis Servlet</display-name>
    <servlet-name>AxisServlet</servlet-name>
    <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
</servlet>
<servlet>
    <display-name>Axis Admin Servlet</display-name>
    <servlet-name>AdminServlet</servlet-name>
    <servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
    <load-on-startup>100</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>*.jws</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
</servlet-mapping></web-app>

1.4在lib下添加server-config.wsdd (webservice配置)文件

<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

    <!-- 处理器 -->
    <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" />
      <!-- 待添加的服务 -->
    <!-- 指定处理器 -->
    <transport name="http">
        <requestFlow>
            <handler type="URLMapper"/>
        </requestFlow>
    </transport>

</deployment>

好 这样就搭建成功了

然后开始上代码

2 服务端与客户端的数据传输

2.0这里我们分4中情况来实践

  情况1 传值:String         返回值: String

  情况2 传值:User(自定义对象)    返回值: String

  情况3 传值:String         返回值: User(自定义对象)

  情况4 传值:User(自定义对象)    返回值: UserInfo(自定义对象)

2.1 情况1 (传值:String 返回值: String)

2.1.1

新建一个实现类 UserService.java   并新建接收方法 showName

package lqb.manage;
public class UserService {

    public String showName(String name){
        System.out.println("UserService --- showName "+name);
        return String.format("name:%s",name);
    }

}

2.1.2

然后 在server-config.wsdd文件中添加服务

<!-- provider="java:RPC"  webservice是以javabean的形式提供的-->
    <service name="userService" provider="java:RPC">
        <!-- 指定类名 -->
        <parameter name="className" value="lqb.manage.UserService" />

    </service>

ok 这样就可以了

2.1.3

然后写客户端我们也再新建个类  Cline.java

并写一个跟这个服务通讯的测试方法 getNameWBSC()

/**
     *
     * @param:  String
     * @return: String
     */
    public static void getNameWBSC(){

        Service service = new Service();
        String url="http://127.0.0.1:8080/wbsDemo/services/userService";
        String methodName="showName";
        String name="李";
        System.out.println("Cline -- getNameWBSC");
        System.out.println("para String "+name);
        try {
            Call call=(Call)service.createCall();
            call.setTargetEndpointAddress(new URL(url));
            call.setOperationName(new QName("", methodName));
            //设置要传入参数,如果没有要传入的参数,则不要写这个
            call.addParameter("name", XMLType.XSD_STRING, ParameterMode.IN);
            //设置返回的类型
            call.setReturnType(org.apache.axis.Constants.XSD_STRING);  

            //执行,调用webservice
            String result = (String) call.invoke(new Object[]{name});
            System.out.println("返回的结果是:"+result);  

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

2.1.4

然后运行

客户端显示                                                             服务端显示

                        

ok 测试通过

2.2然后我们来看情况2

2.2.1

为了测试 我们新建一个自定义类 User.Class

package lqb.bean;

public class User {

    private String name;
    private int age;
    /*省略get set 构造函数*/
}

2.2.2

然后在UserService.java中添加 方法

public User showUser(String name){
     System.out.println("UserService --- showUser "+name);
     User u=new User(name,10);
     return u;
}

2.2.3

接着 在配置文件server-config.wsdd中添加服务

<!-- 一个服务 -->
    <!-- provider="java:RPC"  webservice是以javabean的形式提供的-->
    <service name="userService" provider="java:RPC">
        <!-- 指定类名 -->
        <parameter name="className" value="lqb.manage.UserService" />
        <!-- 参数返回值的bean -->
        <beanMapping languageSpecificType="java:lqb.bean.User" qname="ns1:User" xmlns:ns1="BeanService"/>
    </service>

与情况一不同 这里需要传输bean 所以需要添加一个beanMapping 

2.2.4

好 写测试方法 我们还是在Cline.java 中添加 getUserWBSC()

/**
     * 需要在wsdd文件中写Mapping
     * @param:  String
     * @return:    User
     */
    public static void getUserWBSC(){

        Service service = new Service();
        String url="http://127.0.0.1:8080/wbsDemo/services/userService";
        String methodName="showUser";
        String qnv="User";
        String name="王";

        System.out.println("Cline -- getUserWBSC");
        System.out.println("para String "+name);
        try {
            Call call=(Call)service.createCall();
            call.setTargetEndpointAddress(new URL(url));
            call.setOperationName(new QName("", methodName));
            QName qn = new QName(qnv, methodName);
            call.registerTypeMapping(User.class, qn, new BeanSerializerFactory(User.class, qn), new BeanDeserializerFactory(User.class, qn));  

            //设置要传入参数,如果没有要传入的参数,则不要写这个
            call.addParameter("name", XMLType.XSD_STRING, ParameterMode.IN);
            //设置返回的类型
            call.setReturnClass(User.class);  

            //执行,调用webservice
            User u = (User) call.invoke(new Object[]{name});
            System.out.println("返回的结果是:"+u.getName()+"-"+u.getAge());  

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

好 然后运行测试 ...(这里就不再呈现了 和情况1类似 大家脑补下)

2.3然后我们来看情况3

2.3.1

bean还是使用刚才的User

2.3.2

然后在UserService中添加方法 showAge

public String showAge(User u){
        System.out.println("UserService --- showAge "+u.getAge());
    return String.format("age:%d",u.getAge());
}

2.3.3

swdd文件同第二种情况 (略)

2.3.4

然后是测试方法  还是在Cline.java中添加

/**
     *
     * @param:  User
     * @return:    String
     */
    public static void getAgeWBSC(){

        Service service = new Service();
        String url="http://127.0.0.1:8080/wbsDemo/services/userService";
        String methodName="showAge";
        User u=new User("张",10);
        System.out.println("Cline -- getAgeWBSC");
        System.out.println("para User:"+u.getName()+" - "+u.getAge());
        try {
            Call call=(Call)service.createCall();
            call.setTargetEndpointAddress(new URL(url));
            call.setOperationName(new QName("", methodName));
            //设置要传入参数,如果没有要传入的参数,则不要写这个
//            QName qn = new QName("urn:BeanService", methodName);
            QName qn = new QName("User", methodName);
            call.registerTypeMapping(User.class, qn, new BeanSerializerFactory(User.class, qn), new BeanDeserializerFactory(User.class, qn));  

            call.addParameter("name", qn, ParameterMode.IN);
            //设置返回的类型
            call.setReturnType(Constants.XSD_STRING);  

            //执行,调用webservice
            String result = (String) call.invoke(new Object[]{u});
            System.out.println("返回的结果是:"+result);  

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

好 测试通过 (继续脑补)

2.4最后是第四种情况

2.4.1

为不混淆参数和返回值 我们再new一个自定义的bean UserInfo.Class

package lqb.bean;

public class UserInfo{

    private String name;
    private String desc;

    /*省略get set 构造函数*/
}

2.4.2

然后是服务端 在UserService中添加 方法showUserInfo

public UserInfo showUserInfo(User u){
        System.out.println("UserService --- showUserInfo "+u.getName());
        UserInfo ui=new UserInfo(u.getName(),"1234");
        return ui;
    }

2.4.3

这次 对应的配置文件觉有不同 需要再添加一个 beanMapping

<!-- 一个服务 -->
    <!-- provider="java:RPC"  webservice是以javabean的形式提供的-->
    <service name="userService" provider="java:RPC">
        <!-- 指定类名 -->
        <parameter name="className" value="lqb.manage.UserService" />
        <!-- 参数返回值的bean -->
        <beanMapping languageSpecificType="java:lqb.bean.User" qname="ns1:User" xmlns:ns1="BeanService"/>
        <beanMapping languageSpecificType="java:lqb.bean.UserInfo" qname="ns1:UserInfo" xmlns:ns1="BeanService"/>
    </service>

2.4.4

最后还是Cline的测试方法getUserInfoWBSC

/**
     *
     * @param:  User
     * @return:    UserInfo
     */
    public static void getUserInfoWBSC(){

        Service service = new Service();
        String url="http://127.0.0.1:8080/wbsDemo/services/userService";
        String methodName="showUserInfo";
        User u=new User("赵",10);
        System.out.println("Cline -- getUserInfoWBSC");
        System.out.println("para User:"+u.getName()+" - "+u.getAge());
        try {
            Call call=(Call)service.createCall();
            call.setTargetEndpointAddress(new URL(url));
            call.setOperationName(new QName("", methodName));
            //设置要传入参数,如果没有要传入的参数,则不要写这个
            QName qn = new QName("User", methodName);
            call.registerTypeMapping(User.class, qn, new BeanSerializerFactory(User.class, qn), new BeanDeserializerFactory(User.class, qn));  

            QName qn1 = new QName("UserInfo", methodName);
            call.registerTypeMapping(UserInfo.class, qn1, new BeanSerializerFactory(UserInfo.class, qn1), new BeanDeserializerFactory(UserInfo.class, qn1));  

            call.addParameter("name", qn, ParameterMode.IN);
            //设置返回的类型
            call.setReturnClass(UserInfo.class);  

            //执行,调用webservice
            UserInfo ui = (UserInfo) call.invoke(new Object[]{u});
            System.out.println("返回的结果是:"+ui.getName()+" - "+ui.getDesc());  

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

好 ....通过 继续脑补

2.5 至于其他情况(无传值 或者 无返回值)这里就不多说了 根据上面的例子 大家应该可以写出来

3 demo下载

百度云链接  密码:ybnx

时间: 2024-10-12 23:17:10

MyEclipse 搭建webservice (axis1.4)的相关文章

使用MyEclipse搭建java Web项目开发

转自:http://blog.csdn.net/jiuqiyuliang/article/details/36875217 首先,在开始搭建MyEclipse的开发环境之前,还有三步工具的安装需要完成,只要在安装配置成功之后才可以进入下面的java Web项目开发环境的搭建. 1.安装工具 第一步,下载并安装JDK,到官网上下载安装即可,之后需要细心的配置环境变量,我给大家推荐百度文库的一篇文章,猛戳这里. 第二步,下载Tomcat,当然可以去Apache Tomcat的官网,同样,您可以移驾到

AXIS2+Myeclipse实现WebService数据库存储简单实例

AXIS2+Myeclipse实现WebService数据库存储简单实例 接了个简单的毕业设计.需要WebService实现前台显示后台数据库存储,本人菜鸟,想了下,决定服务端存放有数据库连接的方法,客户端调用服务端提供的方法,实现与数据库的连接. 一.准备工作: 1.下载AXIS2框架 这里使用的版本是axis2-1.7.2,下载地址:http://axis.apache.org/axis2/java/core/download.cgi官网. (1)Binary distribution ax

【java项目实战】一步步教你使用MyEclipse搭建java Web项目开发环境(一)

首先,在开始搭建MyEclipse的开发环境之前,还有三步工具的安装需要完成,只要在安装配置成功之后才可以进入下面的java Web项目开发环境的搭建. 1.安装工具 第一步,下载并安装JDK,到官网上下载安装即可,之后需要细心的配置环境变量,我给大家推荐百度文库的一篇文章,猛戳这里. 第二步,下载Tomcat,当然可以去Apache Tomcat的官网,同样,您可以移驾到我的资源下载,外送API文档(免资源分). 第三步,下载MyEclipse,MyEclipse官网,傻瓜式安装即可. ===

用MyEclipse搭建SSH框架(Struts2 Spring Hibernate)

1.new一个web project. 2.右键项目,为项目添加Struts支持. 点击Finish.src目录下多了struts.xml配置文件. 3.使用MyEclipse DataBase Explorer建立数据源. new一个数据源.填入数据源信息. 点击test Driver,如果成功显示: 点击OK,点击Finish. 4.为项目添加Spring支持. 选择五个包,之后JAR Library Installation为如下图. 点击Next. 默认点击Finish. 5.为项目添加

MyEclipse构建WebService案例

Hi,大家好! 今天主要和大家分享,如何搭建一个Web服务,做Android开发,不可避免会涉及到客户端开发,我们怎么样来实现一个服务端,怎么样来实现一个客户端,并相互传递数据.就算调用别人的服务时,也能知道大概是怎么样实现的. WebService一般分为.Net版和Java版,今天我们主要来实现Java版的WebService,.Net版本的还是比较简单的. 照例,轻松一笑: 波音777是有史以来第一架完全在电脑虚拟现实中设计制造的飞机,所用的设备完全由IBM公司所提供.试飞前,波音公司的总

Maven Myeclipse 搭建项目

一.maven概述 Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具! 简单说Maven 是一个项目管理和构建自动化工具 二.环境搭建 1.配置环境变量 系统变量:MAVEN_HOME = D:\tools\apache-maven-3.2.3 系统变量:path = %MAVEN_HOME%\bin 测试: 2.myEclipse配置 maven:选择环境变量中配置的maven路径 3.修改 maven 本地仓库存放位置: 找到 ap

Java使用MyEclipse构建webService简单案例

 什么是WebServices? 它是一种构建应用程序的普遍模型,可以在任何支持网络通信的操作系统中实施运行;它是一种新的web应用程序分支,是自包含.自描述.模块化的应用,可以发布.定位.通过web调用.Web Service是一个应用组件,它逻辑性的为其他应用程序提供数据与服务.各应用程序通过网络协议和规定的一些标准数据格式(Http,XML,Soap)来访问Web Service,通过Web Service内部执行得到所需结果.Web Service可以执行从简单的请求到复杂商务处理的任何

MyEclipse搭建Java Web项目开发环境

1.安装工具 第一步,下载安装JDK,并配置环境: 配置环境变量步骤: (1)新建变量名:JAVA_HOME,变量值为JDK的安装路径: (2)打开PATH,添加变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin: (3)新建变量名:CLASSPATH,变量值:%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar. 验证是否配置成功:在cmd命令下输入 java命令,如出现对应的信息,表示安装成功,如下所示: 第二步,下载并

MyEclipse开发WebService教程(转)

http://blog.csdn.net/flightme/article/details/6977191 . 创建一个 webService 工程. 2. 创建一个普通 Java 类 view plaincopy to clipboard package com.hmw.jaxws; /** * 提供 WebService 服务的测试类<br> * <b>注意:</b>该类必须有一个无参构造方法,否则无法使用 MyEclipse 的向导为此类创建 jax-ws 的 w