最新消息:

Axis通过wsdd部署Web Service

Java 观测者 1300浏览

1. 环境准备

  • MyEclipse 6.5
  • Tomcat 6
  • JDK 1.5
  • axis(非axis2)
  • 2. 新建web工程
    新建一web工程,工程名称为axistest。新建完成后,导入下图所示的axis相关的jar包。

    3. 在web.xml中添加axis相关的配置信息

    <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>
    <servlet-mapping>
       <servlet-name>AdminServlet</servlet-name>
       <url-pattern>/servlet/AdminServlet</url-pattern>
    </servlet-mapping>

    4. 新建提供服务的Java类
    在src下新建com包,在com包下新建HelloWorld类,HelloWorld的内容如下:

    package com;

    public class HelloWorld {

       public String sayHello(String msg){
           if(null==msg || "".equals(msg)){
               return "您好!";
           }else{
               return "您好" + msg + "!";
           }
       }

       public int sayAge(){
           return 28;
       }

    }

    5. 配置server-config.wsdd
    在WEB-INF下新建server-config.wsdd文件,内容如下:

    <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" />
           
       <!-- 一个服务 -->
       <!-- provider="java:RPC"  webservice是以javabean的形式提供的-->
       <service name="helloWorldService" provider="java:RPC">
           <!-- 指定类名 -->
           <parameter name="className" value="com.HelloWorld" />
           <!-- 类中允许访问的方法 -->
           <parameter name="allowedMethod" value="*"></parameter>
       </service>

       <!-- 指定处理器 -->
       <transport name="http">
           <requestFlow>
               <handler type="URLMapper"/><!-- 引用上边的 -->
           </requestFlow>
       </transport>

    </deployment>

    wsdd文件标签节点说明:
    deployment:表明这是一个axis部署描述文件;
    service:axis提供的一个web service服务。service标签中parameter allowedMethod用于指定一个以空格分隔的方法名,只有这些方法可以通过web service访问。也可以将这个值指定为“*”表示所有的方法都可以访问。
    provider:服务类型,共有四种,分别是RPC,Document,Wrapped和Message。详见org.apache.axis.providers包的API文档;
    parameter:用来设置Axis的各种属性;
    requestFlow:局的请求Handlers,在调用实际的服务之前调用;
    transport:定义了服务器端的传输方式

    至此web service相关的东西已经配置好,此时工程的目录结构如下:

    6. 部署到Tomcat测试
    将工程发布到Tomcat,在浏览器里访问http://127.0.0.1:8080/axistest/services,如果出现如下页面,则表示web service部署成功。

    点击上面的wsdl链接,进入下图所示页面

    注意上面的红圈的namespace,下面测试QName有用到。

    7. 客户端测试
    在com包下新建测试类,名称为ClientTest,内容如下:

    package com;

    import java.net.MalformedURLException;
    import java.rmi.RemoteException;

    import javax.xml.namespace.QName;
    import javax.xml.rpc.ServiceException;

    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;

    /**
    * @author 观测者
    * @date 2015-08-27
    */
    public class ClientTest {

       public static void main(String[] args) throws MalformedURLException, RemoteException {
           
           Service service = new Service();
           try {
               
               Call call = (Call) service.createCall();
               //设置地址
               call.setTargetEndpointAddress(new java.net.URL("http://127.0.0.1:9999/axistest/services/helloWorldService?wsdl"));
               //设置要执行的方法
               call.setOperationName(new QName("http://com","sayHello"));
               //设置要传入参数,如果没有要传入的参数,则不要写这个
               call.addParameter("msg", org.apache.axis.Constants.XSD_STRING,javax.xml.rpc.ParameterMode.IN);
               //设置返回的类型
               call.setReturnType(org.apache.axis.Constants.XSD_STRING);
               
               String name = "观测者";
               //执行,调用webservice
               String result = (String) call.invoke(new Object[]{name});
               System.out.println("返回的结果是:"+result);
               
           } catch (ServiceException e) {
               e.printStackTrace();
           }
       }

    }

    如果一切正常,运行结果如下:
    返回的结果是:您好观测者!

    转载请注明:观测者 » Axis通过wsdd部署Web Service