eclipse3.6通过axis2发布WEB Service


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的值  

转载于:https://my.oschina.net/905430/blog/655254

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值