杰瑞科技汇

Axis Webservice教程该怎么学?

Apache Axis 是一个非常经典和著名的 Java WebService 框架,虽然现在 Spring Boot 与 CXF/JAX-RS 的组合更为流行,但 Axis(特别是 Axis2)仍然是学习 WebService 原理和进行企业级集成的强大工具。

Axis Webservice教程该怎么学?-图1
(图片来源网络,侵删)

本教程将分为以下几个部分:

  1. Apache Axis 简介:了解它是什么,以及它的两个主要版本(Axis1 和 Axis2)的区别。
  2. 环境准备:搭建开发环境。
  3. 使用 Axis1 发布第一个 WebService (简单方式):通过 Axis 提供的 AdminServlet 发布一个简单的 Java 类。
  4. 使用 Axis1 发布第一个 WebService (复杂方式):通过 server-config.wsdd 文件进行更灵活的配置。
  5. 使用 Axis1 调用 WebService (客户端):生成客户端代码并调用服务。
  6. 使用 Axis2 发布 WebService:介绍 Axis2 的发布方式。
  7. 总结与学习路径

Apache Axis 简介

什么是 Axis? Axis 是一个 SOAP (Simple Object Access Protocol) 引擎,它允许你通过标准的 Web 协议(如 HTTP)来创建、部署和调用 WebService。

Axis1 vs. Axis2

特性 Axis 1.x Axis 2.x
架构 基于 XML 的 Handler 链模型,较为陈旧。 采用模块化数据绑定架构,更现代、灵活。
数据绑定 主要使用 DIMEATTACHMENTS 处理附件。 支持 AXIOM (AXIs Object Model),性能更好,内存占用更低。
API 提供了较为复杂的 API,但易于上手。 提供了两种 API:
- AXIOM API (底层)
- DataBinding API (高层,如 ADB, XMLBeans)
性能 相对较慢。 性能显著提升,尤其是在处理大消息时。
工具 主要使用 wsdl2javajava2wsdl 提供了功能更强大的 axis2 命令行工具,支持 Maven 插件。
推荐度 已过时,不推荐新项目使用,但可用于维护旧系统。 推荐,对于需要使用 Axis 的项目,应选择 Axis2。

本教程重点: 由于 Axis1 的概念更基础,更容易理解 WebService 的核心原理,我们将首先详细介绍 Axis1,之后会简要介绍 Axis2 的发布方式。

Axis Webservice教程该怎么学?-图2
(图片来源网络,侵删)

环境准备

  1. JDK: 安装 JDK 1.6 或更高版本。
  2. IDE: Eclipse 或 IntelliJ IDEA。
  3. Web 服务器: Apache Tomcat 7.x 或更高版本。
  4. Axis1 库: 下载 Axis1 的二进制包,可以从 Apache Axis 官网 下载 axis-bin-1_4.zip
  5. Axis2 库: 下载 Axis2 的二进制包,可以从 Apache Axis2 官网 下载 axis2-war-<version>.zip

使用 Axis1 发布第一个 WebService (简单方式)

这种方式非常简单,适合快速测试。

步骤 3.1:创建 Web 项目

  1. 在 Eclipse 中创建一个新的 Dynamic Web Project,命名为 Axis1Demo
  2. 将下载的 axis-bin-1_4.zip 解压,将 lib 目录下的所有 JAR 文件复制到你的项目的 WEB-INF/lib 目录下。
  3. axis-bin-1_4/webapps/axis 目录下的所有文件(除了 WEB-INF)复制到你的项目的根目录下,这包括 axis、`` 等文件。
  4. axis-bin-1_4/webapps/axis/WEB-INF 目录下的 web.xml 文件内容合并到你项目的 WEB-INF/web.xml 文件中。注意不要覆盖,而是添加,Axis 的 web.xml 定义了关键的 Servlet

步骤 3.2:编写服务端代码

创建一个简单的 Java 类,我们将把它暴露为 WebService。

// src/com/example/HelloWorld.java
package com.example;
public class HelloWorld {
    public String sayHello(String name) {
        return "Hello, " + name + "!";
    }
}

步骤 3.3:部署服务

Axis1 提供了一个内置的 Admin 页面来部署服务。

  1. 启动你的 Tomcat 服务器。
  2. 在浏览器中访问 http://localhost:8080/Axis1Demo/axis/ (你的项目名是 Axis1Demo)。
  3. 点击页面上的 "Validate" 链接,确保 Axis 环境配置正确。
  4. 点击 "Administer" 链接进入管理页面。
  5. 在 "Deploy" 标签页下,选择 "Upload a file"。
  6. 点击 "Browse...",选择你编译好的 HelloWorld.class 文件(在 WEB-INF/classes/com/example/ 目录下)。
  7. 点击 "Deploy" 按钮。

如果成功,你会看到部署成功的消息。

Axis Webservice教程该怎么学?-图3
(图片来源网络,侵删)

步骤 3.4:测试服务

  1. 访问 http://localhost:8080/Axis1Demo/axis/servlet/AxisServlet
  2. 在页面中,你应该能看到你刚刚部署的 HelloWorld 服务。
  3. 点击 HelloWorld 链接,进入该服务的 WSDL 页面,你会看到一个类似 http://localhost:8080/Axis1Demo/axis/HelloWorld.jws?wsdl 的地址,这就是服务的描述文件。
  4. Axis 还提供了一个测试页面 http://localhost:8080/Axis1Demo/axis/HappyJaxRpcDev.jsp,输入服务名和方法名,可以直接调用。

使用 Axis1 发布 WebService (复杂方式)

简单方式虽然方便,但缺乏灵活性,复杂方式通过 server-config.wsdd 文件进行配置,可以更好地控制服务的生命周期、参数、类型映射等。

步骤 4.1:修改 web.xml

确保 web.xml 中有 AxisServlet 的映射,并且有一个 request 映射指向 *.jws

<!-- WEB-INF/web.xml -->
...
  <servlet>
    <servlet-name>AxisServlet</servlet-name>
    <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
  </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>
...

步骤 4.2:创建 server-config.wsdd

在你的项目根目录下(与 WEB-INF 同级),创建一个名为 server-config.wsdd 的文件。

步骤 4.3:编写部署脚本

创建一个 Java 类来生成 wsdd 文件内容。

// src/com/example/Deployer.java
package com.example;
import org.apache.axis.client.AdminClient;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.message.SOAPBodyElement;
import org.apache.axis.utils.Options;
import javax.xml.namespace.QName;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
public class Deployer {
    public static void main(String[] args) throws Exception {
        // AxisServlet 的访问地址
        String url = "http://localhost:8080/Axis1Demo/servlet/AxisServlet";
        // wsdd 部署描述符的内容
        String wsdd = "<deployment xmlns=\"http://xml.apache.org/axis/wsdd/\" " +
                      "xmlns:java=\"http://xml.apache.org/axis/wsdd/providers/java\">" +
                      "<service name=\"HelloWorldWS\" provider=\"java:RPC\">" +
                      "<parameter name=\"className\" value=\"com.example.HelloWorld\"/>" +
                      "<parameter name=\"allowedMethods\" value=\"*\"/>" +
                      "</service>" +
                      "</deployment>";
        AdminClient client = new AdminClient();
        Options opts = new Options(args);
        opts.setTargetEndpointAddress(url);
        // 部署服务
        client.process(new File("")); // 传入空文件,使用字符串部署
        client.deploy(opts, new StringReader(wsdd));
        System.out.println("部署成功!");
    }
}

步骤

分享:
扫描分享到社交APP
上一篇
下一篇