前面说了关于axis2服务的开发,今天也说说关于axis2客户端的开发。因为axis2以AXIOM为通信模型,所以基本的客户端的开发也是基于这个完成的,也就是说开发axis2的客户端也需要引入axiom-dom包,同时axis2的核心包也是必不可少的。因为客户端在发送请求过程中,会涉及到编、解码,数据传输、本地化等一系列操作,因此需要较多的包依赖。还好我们可以在开放测试的时候,通过运行根据抛出的异常判断还缺少哪些jar包。我这里列出了在简单使用时候的时候用到的jar包,如下pom文件所示:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.nuc.axis2first</groupId>
<artifactId>axis2firstclient</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>axis2firstclient</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2</artifactId>
<version>1.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.ws.commons.axiom</groupId>
<artifactId>axiom-dom</artifactId>
<version>1.2.11</version>
</dependency>
<dependency>
<groupId>org.apache.ws.commons.axiom</groupId>
<artifactId>axiom-c14n</artifactId>
<version>1.2.11</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.ws.xmlschema</groupId>
<artifactId>xmlschema-core</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.apache.neethi</groupId>
<artifactId>neethi</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-transport-local</artifactId>
<version>1.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-transport-http</artifactId>
<version>1.6.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
下面的代码中展示了如何调用一个axis2的服务:
package com.nuc.axis2first.client;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.Constants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
/**
*
* @author enjiex
*/
public class SampleClient {
private static EndpointReference targetRef = new EndpointReference(
"http://localhost:8080/axis2/services/UserGuideSampleService");
public static OMElement greetUserPayload(String personToGreet) {
OMFactory factory = OMAbstractFactory.getOMFactory();
OMNamespace omNamespace = factory.createOMNamespace(
"http://example1.org/example1", "example1");
OMElement method = factory.createOMElement("sayHello", omNamespace);
OMElement value = factory.createOMElement("personToGreet", omNamespace);
value.addChild(factory.createOMText(value, personToGreet));
method.addChild(value);
return method;
}
public static void main(String[] args) {
try {
OMElement payload = SampleClient.greetUserPayload("John");
Options options = new Options();
options.setTo(targetRef);
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
ServiceClient sender = new ServiceClient();
sender.setOptions(options);
OMElement result = sender.sendReceive(payload);
String response = result.getFirstElement().getText();
System.out.println(response);
} catch (Exception e) { // (XMLStreamException e) {
System.out.println(e.toString());
}
}
}
当然上面的代码来源于官方文档上的示例程序,我下面做一个简单的分析:
1. 调用服务之前我们必须得先获得服务的位置,这个可以在axis2的服务管理系统(axis2.war项目)上查看获得。例如上面的:http://localhost:8080/axis2/services/UserGuideSampleService。仅此还不够,所以就有了EndPointReference来包装这个服务资源。
2. 在上面的程序中,我们去调用前面axis2学习——开发自定义的服务中定义的服务sayHello,那么我们这需要定义AXIOM格式的请求体。AXIOM是一种类DOM的对象模型,所以在操作上与DOM操作类似。所以在greetUserPayload(String)方法中定义了与axis2上的服务一致的命令空间,然后通过OMFactory的工厂方法创建出分别用于表示方法名、参数等的OMElement对象,并通过appChild方法进行关联。
3. 有了服务源、消息体等信息后,我们在main方法中设定了使用的传输协议,然后就把请求发送出去了,并对返回的结果进行分析。
上面是一个最原始的调用过程,在实际应用中,为了减少代码冗余,便于维护,我们可能会开发出一个用于发送请求和对请求做初始解析的通用组件,这里不再阐述。
分享到:
相关推荐
标题中的“axis2学习——开发自定义的axis2服务”表明了本文主要涉及Apache Axis2框架,这是一个用于构建Web服务和SOA(Service-Oriented Architecture)应用的开放源码平台。Axis2允许开发者创建、部署和管理服务,...
描述中提到,这个压缩包包含的代码与Axis2服务端和wsimport客户端有关,并提供了进一步学习的资源——一个CSDN博客文章链接(https://blog.csdn.net/aqsunkai/article/details/51711087)。该博客文章可能详细解释了...
【标题】:Web服务接口(WebService)学习二之(1)——Axis2服务器端开发总结 在本文中,我们将深入探讨使用Apache Axis2框架进行Web服务(WebService)服务器端开发的相关知识点。Apache Axis2是Java平台上一个高效...
2. **服务部署**:Axis2支持两种部署方式——存档部署和热部署。存档部署通过将服务打包为`.aar`文件进行部署,而热部署允许直接通过类路径加载服务。 3. **模块**:模块是Axis2中的可插拔组件,可以添加额外的功能...
本文将深入探讨两种流行的Java Web服务框架——Axis2和CXF,并提供一个简单的实例来帮助理解它们的工作原理和使用方法。 首先,让我们了解一下`Axis2`。Axis2是Apache软件基金会开发的一个高性能、灵活且可扩展的...
总结一下,"webServices学习之二——axis1传递复杂类型javabean"这篇文章可能会详细讲解如何使用Axis1框架处理JavaBean对象,包括创建JavaBean、生成WSDL、部署服务以及客户端调用等步骤。了解这些内容对于开发基于...
通过提供一个WSDL文件,Axis2可以自动生成Java服务端代码和客户端存根,简化了Web服务开发过程。这意味着开发者无需手动编写这些接口和实现,而是可以专注于业务逻辑。 “压缩包子文件的文件名称列表”中,我们看到...
本文将详细介绍在MyEclipse中使用Axis2插件——axis2-eclipse-codegen-wizard和Axis2_Service_Archiver,以及如何利用这两个工具来简化Web服务的开发过程。 首先,我们来看"axis2-eclipse-codegen-wizard"。这是一...
接下来,使用Axis1的`wsdl2java`工具生成服务端和客户端的 stubs。这个工具会从WSDL(Web Service Description Language)文件生成必要的Java代码。如果你没有WSDL文件,可以使用 Axis1 提供的 `wsdl2java` 命令行...
标签“axis2 jar下载”直接指出了本话题的核心——获取Apache Axis2的JAR文件。这通常是通过访问Apache官方网站的下载页面来完成的,用户需要根据项目需求选择合适的版本和配置。 在压缩包子文件的文件名称列表中,...
标题“axis2-1.5.6-bin.zip”和描述中的“axis2-1.5.6-bin.zip”均指向了该框架的一个特定版本——1.5.6的二进制发行版。这个压缩包包含了运行和开发基于Axis2 Web服务所需的所有文件。 一、Apache Axis2简介 ...
标题 "axis2-1.7.7-bin所有jar包" 提到的是Axis2的一个特定版本——1.7.7的二进制发行版中的jar包集合。Axis2是一个开源的Web服务引擎,它允许开发者创建、部署和管理Web服务。在Java世界中,Web服务通常基于SOAP...
标题“axis2-1.6.2-bin”指的是Apache Axis2的一个特定版本——1.6.2的二进制发布包。Apache Axis2是Web服务引擎,它专注于提供高性能、可扩展性和灵活性,用于构建和部署Web服务。这个版本(1.6.2)包含了运行和...
【Axis2从入门到精通——Webservice在Eclipse下开发教程】 Axis2是Apache软件基金会开发的一款先进的Web服务引擎,它是Axis1.x的全新设计版本,旨在提供更高效、更灵活的Web服务开发体验。本教程将逐步指导你如何...
7. **丰富的工具集**:Axis2提供了一系列工具,如WSDL2Java、Java2WSDL、wsdl2java,帮助开发者快速生成服务接口、客户端代码,以及从WSDL文件中生成服务代码。 8. **国际化和本地化**:Axis2支持多语言环境,能够...
标题 "myeclipse_axis插件" 提到的是在MyEclipse集成开发环境中使用的Axis插件,主要用于支持基于Axis2的Web服务开发。MyEclipse是一款强大的Java EE集成开发环境,而Axis2是Apache软件基金会开发的Web服务引擎,...
2. **部署服务**: 在`axis2.xml`中配置服务,或者使用更简单的方式——无需任何配置文件即可部署服务。 3. **客户端调用**: 使用Java或.NET客户端调用部署好的Web服务。 **4.2 示例代码** - **服务端代码**: ```...
首先,我们关注的两个压缩文件名——"axis2-eclipse-codegen-wizard.zip"和"axis2-eclipse-service-archiver-wizard.zip",分别对应了Axis2在Eclipse中的两个重要工具: 1. **Axis2 Eclipse Codegen Wizard**: 这个...