和上一篇的POJO 部署相比主要是services.xml 中配置的消息接受处理器类不一样和Java 类中写法不一样。

使用AXIOM构建服务

样例源码路径: C:\Apps\axis2\axis2-1.7.9\samples\quickstartaxiom

请注意/ samples / quickstartaxiom中包含的目录结构:

- quickstartaxiom
- README.txt
- build.xml
- resources
- META-INF
- services.xml
- StockQuoteService.wsdl
- src
- samples
- quickstart
- service
- axiom
- StockQuoteService.java
- clients
- AXIOMClient.java

由于AXIOM略有不同,因此您需要一个与POJO不同的service.xml文件。定义它,如代码清单4所示。

代码4:服务定义文件。

<service name="StockQuoteService" scope="application">
<description>
Stock Quote Service
</description>
<operation name="getPrice">
<messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
</operation>
<operation name="update">
<messageReceiver class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
</operation>
<parameter name="ServiceClass">samples.quickstart.service.axiom.StockQuoteService</parameter>
</service>

请注意,它几乎相同,只是在service.xml文件中显式定义了操作,MessageReceivers现在是RawXML。

现在,上面引用的StockQuoteService.java类是一个使用Axis2库中的类的普通Java类,其定义如代码清单5所示。

代码5:使用AXIOM的StockQuoteService类

package samples.quickstart.service.axiom;

import javax.xml.stream.XMLStreamException;
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 java.util.HashMap;
public class StockQuoteService {
private HashMap map = new HashMap(); public OMElement getPrice(OMElement element) throws XMLStreamException {
element.build();
element.detach(); OMElement symbolElement = element.getFirstElement();
String symbol = symbolElement.getText(); String returnText = "42";
Double price = (Double) map.get(symbol);
if(price != null){
returnText = "" + price.doubleValue();
}
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs =
fac.createOMNamespace("http://axiom.service.quickstart.samples/xsd", "tns");
OMElement method = fac.createOMElement("getPriceResponse", omNs);
OMElement value = fac.createOMElement("price", omNs);
value.addChild(fac.createOMText(value, returnText));
method.addChild(value);
return method;
} public void update(OMElement element) throws XMLStreamException {
element.build();
element.detach(); OMElement symbolElement = element.getFirstElement();
String symbol = symbolElement.getText(); OMElement priceElement = (OMElement)symbolElement.getNextOMSibling();
String price = priceElement.getText(); map.put(symbol, new Double(price));
}
}

Axis2使用AXIOM,或AXIs对象模型,类似于DOM(文档对象模型)的结构,它基于StAX API(用于XML的Streaming API)。充当服务的方法必须将OMElement作为其参数,OMElement表示在这种情况下发生的XML元素是传入SOAP消息的有效负载。例如,方法getPrice(OMElement)提取有效负载元素的第一个子元素的内容,该元素对应于股票代码,并使用它来查找股票的当前价格。除非这是“仅在”服务,否则这些方法必须返回OMElement,因为它成为返回SOAP消息的有效负载。

现在通过在Axis2_HOME / samples / quickstartaxiom目录中键入ant generate.service来构建项目。

将StockQuoteService.aar文件放在servlet引擎的webapps / axis2 / WEB-INF / services目录中,并通过查看服务列表来检查是否已正确部署该服务,

http://localhost:8080/axis2/services/listServices

您还可以在以下位置检查自定义WSDL:

http://localhost:8080/axis2/services/StockQuoteService?wsdl

the schema

http://localhost:8080/axis2/services/StockQuoteService?xsd
 

2.2 Apache Axis2 快速学习手册之 AXIOM 构建 Web Service的更多相关文章

  1. 2.1 Apache Axis2 快速学习手册之 POJO 构建Web Service

    1. 准备:创建一个Maven Web App 项目 这里让我们使用Maven 模板创建一个Web App 项目 1. New------> Maven Project 2. 使用默认配置,点击 ...

  2. 2.3 Apache Axis2 快速学习手册之 ADB 构建Web Service

    使用ADB生成服务(根据ADB 命令将wsdl 文件还原成Java代码) 要使用Axis2数据绑定框架(ADB)生成和部署服务,请执行以下步骤. 通过在Axis2_HOME / samples / q ...

  3. 2.5 Apache Axis2 快速学习手册之JiBx 构建Web Service

    5. 使用JiBX生成服务(通过JIBX 命令将wsdl 生成 services ) 要使用JiBX数据绑定生成和部署服务,请执行以下步骤. 通过在Axis2_HOME / samples / qui ...

  4. 2.4 Apache Axis2 快速学习手册之XMLBeans 构建Web Service

    4. 使用XMLBeans生成服务(通过xml bean 命令将wsdl 文件生成java 代码) 要使用XMLBeans生成服务,请执行以下步骤. 通过在Axis2_HOME / samples / ...

  5. 2. Apache Axis2 快速学习手册之概览

    这篇博文和大家一起学习下Apache Axis2 官方文档的快速指南篇 英文原文:http://axis.apache.org/axis2/java/core/docs/quickstartguide ...

  6. Eclipse利用Axis2插件构建Web Service并测试

    在学习Web Service的时候,从网上找到前辈的博客http://www.cnblogs.com/hexinlin/p/3358558.html,并依此文的方法按部就班:编写欲发布的java类He ...

  7. Spring学习(七)——开发Web Service的几种方式

    本文作者在学习使用Java开发Web Service(不包括Restful)时,由于不知道Java有这么多框架支持开发Web Service一度陷入迷惘,不知道这些框架各有 什么不同,各有什么优缺点. ...

  8. 【webpack插件使用】在开发中快速掌握并使用Webpack构建web应用程序

    1.webpack-dev-server插件的基本使用 入门程序 const path = require('path'); // 导出一个Webpack的配置对象(通过node中的模块操作,向外暴露 ...

  9. 1. Apache Axis2 下载安装入门

    Apache Axis2 /Java 学习手册   by 星云 0x01 什么是Apache Axis2/Java? Apache Axis2™ 是一个Web Service / SOAP / WSD ...

随机推荐

  1. java 生成二维码、可带LOGO、可去白边

      1.准备工作 所需jar包: JDK 1.6: commons-codec-1.11.jar core-2.2.jar javase-2.2.jar JDK 1.7: commons-codec- ...

  2. Selenium简单测试页面加载速度的性能(Page loading performance)

    利用selenium的可以执行javascript脚本的特性,我写了一个java版本的获得页面加载速度的代码,这样你就可以在进行功能测试的同时进行一个简单的测试页面的加载速度的性能测试. 我现在的项目 ...

  3. 关于.NET编程中各种事务的实现

    从数据库事务开始 在很早的以前,我们要实现一个事务通常是基于SQL的数据库事务,一般的通过SQL查询语言来实现,如下所示,同时更新两本书的价格: BEGIN TRANSACTION UPDATE tb ...

  4. Centos6.x 设置终端超时, 加强用户密码策略

    1. 密码有效期, 密码长度 $ more /etc/login.defs # Password aging controls: # # PASS_MAX_DAYS Maximum number of ...

  5. (转)IntelliJ IDEA java项目导入jar包,打jar包

    以下为转载原文:https://www.cnblogs.com/yulia/p/6824058.html 一.导入 1.java项目在没有导入该jar包之前,如图: 2.点击 File ->   ...

  6. Http网络协议

    目录结构: contents structure [-] 什么是HTTP协议 Http协议的发展历史 Http的报文结构 客户端请求 服务端响应消息 Content-Type application/ ...

  7. Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER 解决方案

    主要是由于调试的环境中已有一个同名的Provider存在. 解决方法是修改AndroidManifest.xml中的 <provider android:name=".apps.App ...

  8. (麻省理工免费课程)C语言内存管理和C++面向对象编程

    此课程有全部讲义和习题. 课程描述实在得令人发指.翻译如下: 您是否由于自己的Python程序比同僚们的C程序慢而垂头丧气?你是否想不用JAVA实现面向对象?加入我们,学习C和C++吧!我们带您从简单 ...

  9. 还没被玩坏的robobrowser(2)——安装及快速开始

    安装robobrowser 注意:这里假设你知道如何使用pip安装python的库的知识,如果你不了解这一块的话,点这里获取帮助. 强烈推荐使用pip安装. pip install robobrows ...

  10. Objective-C 如何让非等宽的数字和空格对齐

    在printf中,我们可以通过格式字符串来对文字进行对齐输出,比如: printf("%5d\n%5d", 12, 345); 在使用等宽字体的Console中,我们可以看到数字右 ...