文档章节

eclipse3.6通过axis2发布WEB Service

i
 itrookior
发布于 2016/04/08 17:20
字数 2042
阅读 9
收藏 0


WEB Service

详细步骤:

WebService概念:它可以让一个程序透明的调用互联网程序,不用管具体实现细节,只要WebService公开了服务接口,远程客户端就可以调用服务。Webservice基于HTTP协议,它是分布式应用程序的发展趋势。

Apache Axis是一个开源的WebSerbive运行引擎,现在拥有1.x2.x两个版本。本文讲解Axis2.x版本,该版本较Axis1.x版本在体系结构上进行了重写,具有更高的效率、更加模块化也更加面向XMLAxis应该是最早一批SOAP(简单对象访问协议),该协议提供了标准的RPC方法来调用WebServiceSOAPRPC是建立在HTTP请求响应模式上的。

1.环境准备:

IDEEclipse3.6

依赖的JAR文件:

www.apache.orgApache官方网站)上去下载

下载地址:http://axis.apache.org/axis2/java/core/download.cgi

此处下载最新版本1.6.2版本的Binary Distribution zip文件。

配置EclipseEclipse自带了开发WebService的工具。

打开Eclipse-->点击菜单windows-->Preferences-->WebServices-->Axis2Preferences-->设置Axis2 runtime locationAxis2下载后并解压的核心包的位置:

选择后Eclipse会自动检测包是否正确。如果successfully提示表示设置正确。

2.Eclipse创建一个WebProject时,点击ConfigurationModify会出现下图界面(或者选择我们工作区间的项目,选择的是fsew工程,工程右键->Preferences->Project Facets选项卡)

勾选Axis2 Web ServicesOK,项目集成web service(项目的Dynamic Web Module版本不能低于2.2,高于2.5版本)

成功后会发现在WEB-INF文件夹下会多出一个axis2-web的文件夹,这个是Axis2的项目文件夹。

3.开发实例

fsew工程的src下新建一个名为com.ac.ms.MSService的类:

package com.ac.ms;

importjava.util.List;

importjava.util.Map;

importorg.springframework.jdbc.core.JdbcTemplate;

importcom.ac.core.config.Config;

public class MSService {

JdbcTemplatejdbcTemplate=null;

public String getSapmleDate(String startDate,StringendDate) {

jdbcTemplate=Config.getInstance().getJdbcTemplate();

StringBufferjson=new StringBuffer();

json.append("{");

StringBuffersql=new StringBuffer();

sql.append(" select a.ID,b.INDICATORNAME,a.AREA_NAME,a.SP_NAME,a.SAMPLE_AREA,a.SAMPLE_DATE,a.SUP_NAME ");

sql.append(" from v_sample02 a,V_indicator b ");

sql.append(" where 1=1 ");

sql.append(" and to_char(a.SAMPLE_DATE, 'yyyy-mm-dd') >= '"+startDate+"' ");

sql.append(" and to_char(a.SAMPLE_DATE, 'yyyy-mm-dd') <= '"+endDate+"' ");

sql.append(" and (a.DEPT_CODE = 'zhongxin' or a.state = 'U2') ");

sql.append(" and b.sampleid=a.ID ");

sql.append(" order by a.ID ");

String sampId=null;

int count=0;

List rs= jdbcTemplate.queryForList(sql.toString());

for (inti=0;i<rs.size();i++) {

Map map=(Map)rs.get(i);

if(sampId==null||!map.get("ID").toString().trim().equals(sampId)){

if(sampId!=null){

json.append("'},");

}

count++;

json.append("{'group':test"+count+",");

json.append("'name':test"+count+",");

json.append("'销售场所':"+map.get("SP_NAME").toString()+",");

json.append("'抽样区域':"+map.get("SAMPLE_AREA").toString()+",");

json.append("'食品产地':"+map.get("AREA_NAME").toString()+",");

json.append("'监管环节':"+map.get("SUP_NAME").toString()+",");

json.append("'抽样日期':"+map.get("SAMPLE_DATE").toString()+",");

json.append("'检测项目':'"+map.get("INDICATORNAME").toString()+",");

}else{

json.append(map.get("INDICATORNAME").toString()+",");

}

sampId=map.get("ID").toString().trim();

}

json.append("}");

returnjson.toString();

}

}

Eclipse中将鼠标放在刚才建立的MSService.java上点击右键,弹出菜单选择Web Service再选择Create Web Service,会弹出下图的界面:

上下分别有个滑块,把上面的滑块滑至最上端(为Test service)。把下方滑块滑至第二格(Develop client)表示生成当前服务的客户端代码(完成后会在Eclipse中会自动生成一个名字为:[当前工程名+Client]的工程),同时选中publish the Web Service(公开这个Web Service,最后选择发布运行的版本是Web service runtimeApache Axis2。点击下一步直至完成。步骤如图:

此处选择是services.xml文件,内容大致为:

<servicename="MSService"><!—服务名-->

<Description>

Please Type your service description here<!—描述信息-->

</Description>

<messageReceivers><!—基本默认。如果接口方法不带参数就只需要配置RPCInOnlyMessageReceiver-->

<messageReceivermep="http://www.w3.org/2004/08/wsdl/in-only"class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>

<messageReceivermep="http://www.w3.org/2004/08/wsdl/in-out"class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>

</messageReceivers>

<parametername="ServiceClass"locked="false">com.ac.ms.MSService</parameter><!—你要发布的类-->

</service>

我们保持默认设置,使用默认的就行,点击下一步。

继续保持默认设置,点击下一步。

当前设置Port Name(端口名)选择:当前工程名+SOAP11HttpSoap11Endpoint。并勾选下面的Generate a JUnit test case to the service。其它选项保持默认点击完成。

完成后可以看到Web Service Explorer中可以看到我们刚刚对外公开的MSService服务,如下图:

选中左边窗口中的MSService服务,找到并点击右边窗口中的Type(类型)为SOAP的服务绑定Name

进入下图界面:

当前列出了当前公开服务可用的方法,当前服务只有一个getSapmleDate方法。点击OperationsNamegetSapmleDate的方法,进入下图的界面:

当前列出了当前公开服务的方法及参数。当前的唯一方法getSapmleDate2String类型的参数startDateendDate

点击Add,转到下图:

为当前公开服务的getSapmleDate方法传入2String类型的startDate参数2012-01-01endDate参数2012-01-31,点击Go按钮。此时下面的Status(状态窗口)中会显示调用该方法后的结果。点击Source可以浏览到已经被SOAP分装好该服务的XML文件。

此时你会发现工程web-inf下面多出三个文件:confmodulesservices。其中,我们的接口就在services目录下面。

现在启动服务器会抛出异常,这是因为Eclipse在自动加载生成该项目时有几个问题需要手动修复,下面分别列出:

问题一:会抛出异常:java.lang.ClassNotFoundException: org.apache.axis2.transport.http.AxisAdminServlet

是因为生动生成的web.xml文件中所指定的AxisAdminServlet包路径有错。

自动生成的源码如下:

<servlet>
<display-name>Apache-Axis Servlet</display-name>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis2.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>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<servlet>
<display-name>Apache-Axis Admin Servlet Web Admin</display-name>
<servlet-name>AxisAdminServlet</servlet-name>
<servlet-class>org.apache.axis2.transport.http.AxisAdminServlet</servlet-class>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AxisAdminServlet</servlet-name>
<url-pattern>/axis2-admin/*</url-pattern>
</servlet-mapping>

注意红色字体部分,我们可以去看一下所下载的Axis2的源包。AxisAdminServlet类所在的包路径并不在下列这个路径中org.apache.axis2.transport.http,该类是属于包org.apache.axis2.webapp下。(如果修改后还有异常,注释掉AxisAdminServlet这个servlet,对我们发布没有影响)

问题二:会抛出异常:java.lang.ClassNotFoundException: org.apache.http.HttpResponseFactory,是因为少JAR包。将开始下好的HttpCore4.1-alpha1包解压后主文件夹下的lib文件夹下有httpcore-4.1-alpha1.jar包。将其拷贝到WEB-INF下的lib文件夹中。1.6.2版本没有这个异常)

重启服务器,正常启动成功,在浏览器地址栏输入:http://localhost:8080/fsew/axis2-web/

进入主页,如下图:表示Axis2部署成功:

点击Validate进入验证Axis2环境界面:

这个页面会加册Axis2运行必备的一些库是否已具备,如果看到下列图中的绿色字体表示环境已搭建成功:

再次返回主页,点击Service,可以看到当前可用的Service列表。默认有一个名为“Version”WebService

再次返回主页,点击Adminnistation,进入管理控制台的登录界面:(如果注释了web.xml中的AxisAdminServlet,这个是访问不到的)

输入username(用户名)和password(密码)。默认用户名为:admin,密码为:axis2

点击登录进入Axis2管理控制平台:

可点击左边的Available Service产看当前可用的Service列表。

4.Eclipse生成的Client工程

Eclipse中找到自动生成的客户端工程,默认名称是fsewClient。在src下有一个webservice接口包名一样的包目录com.ac.ms。其中2个类文件MSServiceCallbackHandlerMSServiceStub。我们自己新建一个测试类Test,如图:

可以在MSServiceStub中修改地址。测试的Test类文件内容为:

package com.ac.ms;

importjava.rmi.RemoteException;

import org.apache.axis2.AxisFault;

public class Test {

/**

* @paramargs

*/

public static void main(String[] args) throws RemoteException {

// TODO Auto-generated method stub

try {

MSServiceStub stub=new MSServiceStub();

MSServiceStub.GetSapmleDategetSapmleDate=new MSServiceStub.GetSapmleDate();

getSapmleDate.setStartDate("2012-01-01");

getSapmleDate.setEndDate("2012-01-31");

String ret=stub.getSapmleDate(getSapmleDate).get_return();

System.out.print(ret);

} catch (AxisFault e) {

e.printStackTrace();

}

}

}

最后右键,运行java application就可以再控制台看到相应的结果了。

linux上部署:

地址:http://192.168.23.84/fsew/services/MSService?wsdl

拷贝/fsew/WebRoot/axis2-web目录及目录下面的所有文件到/usr/local/tomcat6/webapps/fsew/目录下。

拷贝/fsew/WebRoot/WEB-INF/services/fsew/WebRoot/WEB-INF/modules/fsew/WebRoot/WEB-INF/conf/usr/local/tomcat6/webapps/fsew/WEB-INF/目录下。

最后,/fsew/WebRoot/WEB-INF/libaxis2插件自己加的架包全部添加到/usr/local/tomcat6/webapps/fsew/ WEB-INF/lib目录


客户端设置超时时间_serviceClient.getOptions().setTimeOutInMilliSeconds(600000L);
服务端设置超时时间修改conf下的axis2.xml的requestTimeout参数大小不能大于ConfigContextTimeoutInterval的值  

© 著作权归作者所有

i
粉丝 3
博文 26
码字总数 8184
作品 0
昌平
程序员
私信 提问
axis helloworld

Axis2创建WebService实例 博客分类: Java综合 WebServiceTomcatApacheWebXML 一、Axis2的下载和安装 1.可从http://ws.apache.org/axis2/ 下载Axis2的最新版本: 可以下载如下两个zip包: ax...

itwriter
2014/08/22
105
0
webservice发布--使用axis2发布

如何使用axis2发布webservice? axis2发布webservice分为打包发布和不打包发布两种,今天主要研究了一下打包发布的方法 1.部署axis2框架(使用tomcat部署) 1.1 下载axis2的war包,测试使用的w...

程序员小虫
2014/10/23
1K
1
使用axis2发布web service

Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物。Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持Spring、JSON等技术。这些都将在后面的...

NotFoundException
2013/03/13
605
0
Apache Axis2/Java Version 1.6.2 Documentation

Introduction Apache Axis2, the third generation Web services engine is more efficient, more modular and more XML-oriented than its predecessor Apache Axis. It is carefully desig......

i_bobby
2014/09/28
2
0
Eclipse中开发webservice

eclipse开发webservie 1.下载axis2相关架包----war,bin是必须的; axis2的eclipse插件(2个)-http://apache.dataguru.cn/axis/axis2/java/core/org.apache.axis2.eclipse.codegen.plugin0.0......

绿林小子
2015/11/04
161
0

没有更多内容

加载失败,请刷新页面

加载更多

排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
37分钟前
3
0
mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
今天
9
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
今天
6
0
前端——使用base64编码在页面嵌入图片

因为页面中插入一个图片都要写明图片的路径——相对路径或者绝对路径。而除了具体的网站图片的图片地址,如果是在自己电脑文件夹里的图片,当我们的HTML文件在别人电脑上打开的时候图片则由于...

被毒打的程序猿
今天
8
0
Flutter 系列之Dart语言概述

Dart语言与其他语言究竟有什么不同呢?在已有的编程语言经验的基础上,我们该如何快速上手呢?本篇文章从编程语言中最重要的组成部分,也就是基础语法与类型变量出发,一起来学习Dart吧 一、...

過愙
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部