jar包

axis.jar
jaxrpc.jar
saaj.jar
commons-logging.jar
commons-discovery.jar
wsdl4j.jar

SayHello是很多人都写过的web service。实现的功能是通过web服务输出“人名,how are you?”

本文参考网上众多资料,有的也不知源作者是谁,就不一一列举了,在此感谢愿意share经验的同志们。

一、环境搭建问题

1、本文环境:myeclipse7.5+jdk1.5+Tomcat5.5+axis2-1.5.4+Axis2_Codegen_Wizard_1.3.0+Axis2_Service_Archiver_1.3.0

2、Axis工具选择1.3.0,而不用1.5的原因

开始从apache的网站上直接下的最新的tools axis2-eclipse-codegen-plugin-1.5.4和axis2-eclipse-service-plugin-1.5.4。从安装到使用,浪费了大半天的时间,到底还是没有成功。这个版本可能太新了,网上也没有解决问题的方案,就放弃了,选用了1.3的版本。1.5.4的问题如下:

(1)安装时,将.jar插件文件解压在C:/Program Files/Genuitec/MyEclipse 7.5/dropins下,启动myeclipse时,提示一系列的插件依赖问题。大多数问题在将manifest文件中的版本信息删掉后就不提示了,只有javax.xml.stream和javax.xml.stream一直提示没有。下了个javax.xml.stream.jar放在common目录下,还是不行,就按照网上说的将manifest文件中的javax.xml.stream和javax.xml.stream直接删除了。后来在tools使用中出了问题,一直没有解决,不知道是什么原因。

(2)用codegen工具由wsdl文件生成代码时,*stub.java要Implements 服务名接口(本例中是SayHello),可是自动生成的不是接口,而是类,没办法实现,不知道怎么会有这样的bug。解决时直接在*stub中删去了那个implements。

(3)按照网上的步骤,当然也是下文中描述的步骤,在用Archive工具打包service时要用到services.xml文件。那文件明明没有问题,可是老是提示The service file is not valid.网上没有这样的问题解决方法,不知道是不是从来没有人遇到过。也是这个原因决定放弃1.5.4的版本。

总之,开源的东西难免有bug,新的版本很容易有问题。而1.3.0用的人多,虽然也有小bug,好在大家已经找到了解决的办法。

3、安装axis2

这个比较简单,只要把/axis2-1.5.4-war下axis2.war拷贝到tomcat的webapps下即可。成功后启动tomcat,浏览器中键入http://localhost:8080/axis2/后如下图所示,表示安装成功。

4、安装codegen和archive工具

1.3.0版本跟1.5.4不同之处之一在于前者是文件夹下一堆内容,而后者是jar包。

安装时,同样将文件夹拷贝到dropins目录下。启动后在new-other时显示下图,表示安装成功。但是在用wsdl文件生成代码时会出现弹出框报错如下:
An error occurred while completing process -java.lang.reflect.InvocationTargetException 。

解决办法:

(1)如果是已经安装了插件,碰到上面提到的错误后,先关闭MyElipse7.5 ;(否则
1和2步骤可以省略);
MyEclipse7.5默认安装的目录是“C:/Programe Files/Genuitec/MyEclipse7.5/” ;
删除MyEclipse7.5安装目录下dropins/目录的axis2插件 , 然后重新启动MyEclipse (为了防止缓存);
(2)启动完成后,会提示已经删除了axis2 插件; 然后再次关闭MyEclipse;

(3)找到jar包geronimo-stax-api_1.0_spec-1.0.1.jar和backport-util-concurrent-3.1.jar(前者在axis2的lib下,后者在1.5.4中没有,我在1.4.1的版本的lib下找到的),将其拷贝到codegen插件的lib目录下,然后修改对应的plugin.xml文件,在runtime中添加如下代码:

- < library name =" lib/geronimo-stax-api_1.0_spec-1.0.1.jar " >
  < export name =" * " />
  </ library >

- < library name =" lib/backport-util-concurrent-3.1.jar " >
  < export name =" * " />
  </ library >
(4) 将 $workspace 位置 /.metadata/.plugins 下目录 Axis2_Codegen_Wizard 删除;
( 5) 在命令行下切换至 $ECLIPSE_HOME 目录,然后执行: eclipse –clear(这一步我没做)。
这样就完成了。不知道是不是因为我开始没有做第4,5步的原因,第一次生成的java代码,类没有自动编译。又关闭myeclipse,做了第4步,重启myeclipse,重新生成代码,类才自动编译。
二、建立web service(图省事,很多直接从网上拷贝)

2.1创建webApps项目

启动 MyEclipse,新建立一个 WebApps( File->New->Project->Web Project) ,给 Project Name 为 SayHello ,其他保持不改变。

2.2创建WSDL文件

A.选择File->New-Other菜单,进入后找到 MyEclipse->Web Services并选择 WSDL.如下图: 

B.点击下一步按钮,显示如下图:

C.选择“ src”目录作为“ Enter or select the parent folder”的值,“ File name”值给定为 SayHello.wsdl。

D.下一步

》所有界面内容取默认值,Finish!

E.显示 WSDL设计器的界面如下:

F.修改图中标红色的部分:
修改图中的NewOperation为SayHello;
修改input中parameters为SayHelloRequest;
修改output中parameters为SayHelloResponse;
修改完后如下图: 

红色框内为变化的内容,WSDL文件修改完毕。

2.3从 WSDL生成 Java代码

A.选择菜单“ File->New->Other”,从对话框中选取“ Axis2 Wizards”下面的“ Axis2 Code Generator”.点击“ Next” 
 
B.进入下一个页面,保持“ Generate java source code from WSDL file”被选中,点击“ Next”进入下一步。 
C.点击“ Browse”来选取存放在 src目录下的 SayHello.wsdl文件,“ Next” 进入下一步。
D.首先生成客户端代码和测试代码,设置如下:

E.下一步后,选择SayHellosrc目录,如下图: 

Finish !

F.重复从A到C的步骤,然后生成服务端代码,设置如下: 

后面同E。

G.结束后,刷新项目,如图:
 
这是由于没有将Axis2的 jar包放入 class path 中以及源代码的 package不为 org.example.www.sayhello引起的。

H.修改包名为org.example.www.sayhello并从tomcat中的 axis2 web应用 WEB-INF/lib目录中加载所有 jar包到项目的classpath中。

I.在SayHelloTest.java 中引入 junit包。

2.4 编写业务代码

打开 SayHelloSKeleton.java文件其中的方法如下:(偶的跟这个不太一样,懒得再做一次了,反正差不多)

public  org.example.www.sayhello.SayHelloResponse SayHello( org.example.www.sayhello. .SayHello param0)

{

//  Todo fill this with the necessary business logic

throw   new  java.lang.UnsupportedOperationException();

}

修改为:

public org.example.www.sayhello.SayHelloResponse SayHello
                  (
                  org.example.www.sayhello.SayHello request
                  )
            {
                //TODO : fill this with the necessary business logic
                     try

{

SayHelloResponse response = new SayHelloResponse();

response.setOut("Hi,"+request.getIn()+".How are you?");

return response;

}catch(UnsupportedOperationException e)

{

throw e;

}
        }

2.5打包

A.选择菜单“ File->New->Other”,从对话框中选取“ Axis2 Wizards”下面的“ Axis2 Services Archive”.点击“ Next”进入下一个页面 。

B.选择编译好的 class文件所在目录(本项目应该是 WebRoot下面 WEB-INF/classes),“ Next”进入下一步。

C.选择 WSDL文件所在目录,此处为 src目录下的 SayHello.wsdl文件。“ Next”,再“ Next”。选择 services.xm文件。

D.点击“ Next”,将记入最后一个页面,此处有两个选项,一个是输出目录一个是处处文件名称。这里的输出文件名称给的是SayHello。点击“ Finish”完成。

2.6部署

A.将打包好的文件 SayHello.jar拷贝到 Tomcat中已经部署的 Axis2应用的 WEB-INF/services目录下面。

B.重新启动 Tomcat。

C.打开浏览器,输入 http://127.0.0.1:8080/axis2 ,并点击其中的“ services”链接可以看到 SayHello已经被部署。点击SayHello提供的连接可以看到与之对应的 WSDL。

2.7 调用测试
A.修改 SayHelloTest.java文件中的方法 testSayHello 的内容为:

public  void testSayHello() throws java.lang.Exception{

String url="http://localhost:8080/axis2/services/SayHello";
          org.example.www.sayhello.SayHelloStub stub =
                    new org.example.www.sayhello.SayHelloStub(url);//the default implementation should point to the right endpoint

org.example.www.sayhello.SayHelloStub.SayHello request=
                                                        (org.example.www.sayhello.SayHelloStub.SayHello)getTestObject(org.example.www.sayhello.SayHelloStub.SayHello.class);
                    // TODO : Fill in the sayHello2 here
           request.setIn("Sally");
           System.out.println(stub.SayHello(request).getOut());   
                        assertNotNull(stub.SayHello(
                        request));
         }

从菜单中选择“ Run- >Run as->JUnit Test ,在控制台输出Hi,Sally.How are you? 完成测试!

myeclipse下用axis2开发web service的第一个程序(SayHello)相关推荐

  1. myeclipse下用axis2开发web service

    SayHello是很多人都写过的web service.实现的功能是通过web服务输出"人名,how are you?" 本文参考网上众多资料,有的也不知源作者是谁,就不一一列举了 ...

  2. 基于Tomcat5.0和Axis2开发Web Service代码详解

    本文将详细介绍HelloWorld中使用的server和client端代码.阅读之前,你应该首先了解SOAP1.1协议.<?xml:namespace prefix = o ns = " ...

  3. 基于Tomcat5.0和Axis2开发Web Service应用实例

    本文将介绍如何使用Tomcat5.0和Apache Axis2开发.部署及测试一个简单的Web Service应用.<?xml:namespace prefix = o ns = "u ...

  4. 初体验myeclipse+Axis2 开发web service (一)转

    SayHello是很多人都写过的web service.实现的功能是通过web服务输出"人名,how are you?" 本文参考网上众多资料,有的也不知源作者是谁,就不一一列举了 ...

  5. Linux下用gSOAP开发Web Service服务端和客户端程序(一)

    1.功能说明: 要开发的Web Service功能非常简单,就是一个add函数,将两个参数相加,返回其和. 2.C版本的程序: (1)头文件:SmsWBS.h,注释部分不可少,url部分的IP必须填写 ...

  6. [Axis2与Eclipse整合开发Web Service系列之二] Top-Down方式,通过WSDL逆向生成服务端(续)

    前言 本篇是承接上一篇: [Axis2与Eclipse整合开发Web Service系列之二] Top-Down方式,通过WSDL逆向生成服务端 在上一篇粗略地介绍了如何使用Top-Down的方式创建 ...

  7. [图解教程]Axis2与Eclipse整合开发Web Service之二:WSDL逆向生成服务端

    [图解教程]Axis2与Eclipse整合开发Web Service之二:WSDL逆向生成服务端 一般开发Web Service,是选写服务端,再根据生成的WSDL文件生成客户端.看过一本SOA的书中 ...

  8. [Axis2与Eclipse整合开发Web Service系列之三] 服务端返回值

    前言 在前面的三篇中 [Axis2与Eclipse整合开发Web Service系列之一] 生成Web Service Client(将WSDl 转化成 Java代码) [Axis2与Eclipse整 ...

  9. JAVA开发Web Service几种框架介绍

    在讲Web Service开发服务时,需要介绍一个目前开发Web Service的几个框架,分别为Axis,axis2,Xfire,CXF以及JWS(也就是前面所述的JAX-WS,这是Java6发布所 ...

最新文章

  1. 刻意练习:Python基础 -- Task13. datetime模块详解
  2. 或许有一两点你不知的C语言特性
  3. php 抽象类 继承,PHP 抽象类继承抽象类时的注意点
  4. ML之LightGBM:基于titanic数据集利用LightGBM和shap算法实现数据特征的可解释性(量化特征对模型贡献度得分)
  5. ICLR 2020 | 多模态下使用图片信息显著增强机器翻译效果
  6. Android ---------高德卫星地图绘制多个点和点的点击事件自定义弹窗
  7. 如何在虚拟机上安装TrueNAS系统
  8. 怎么做c语言的子程序,哪位师傅知道51单片机怎样编写子程序?C语言的。在主程序里调...
  9. python基础编程语法-Python基础及语法(十三)
  10. MySQL常用语句、连接MySQL格式:mysql-h主机地址-u用户名-p用户密 (详细篇 修改版)
  11. LeetCode:Anagrams
  12. java+swing+mysql员工工资管理系统设计分析
  13. Python入门学习笔记(三)
  14. 通过eslint统一前端IDE的编码风格,避免git冲突
  15. C语言dtoc函数,VFP数据库程序设计基础课后作业(二)参考答案(VFP函数表达式练习题--答案)...
  16. 一款轻量的支付宝支付组件
  17. FusionAccess桌面云
  18. Sublime 安装与中文配置
  19. JavaScript基础第06天笔记
  20. unity课设小游戏_unity3d游戏课程设计报告

热门文章

  1. 2021-09-04 python网络编程Ⅰ
  2. 临床宏基因组学的应用
  3. 那堪春景媚,送君千万里
  4. 5个月的ui设计培训,都学习什么内容|优漫教育
  5. Android基础知识——完善
  6. 云计算机平台 显示器,云桌面
  7. 【HTML期末学生大作业】 制作一个简单HTML宠物网页(HTML+CSS)
  8. 菲涅尔区,前后比,VSWR
  9. 诺基亚5310XM基本属性
  10. 人体中数量最多的神经元,人体内有多少个神经元