axis1-myeclipse/eclipse-入门级别-资源、流程、常见问题
本文转载自:http://blog.****.net/bestcxx/article/details/52300248
axis1-myeclipse/eclipse-入门级别-资源、流程、常见问题
1、资源下载
总共需要 axis1.4资源包,mail.jar和activation.jar
下载完axis1.4资源包 后解压缩到一个地方,路径中不要出现中文,其路径需要在下面axis的环境配置中用到。
我将mail.jar和 activation.jar放到了axis-1_4/lib下,这个在后面的环境变量配置中也要起到作用。
1.1下载途径一:
http://download.****.net/detail/bestcxx/9611310
1.2下载途径二:
·http://mirrors.hust.edu.cn/apache/axis/axis/java/1.4/
打开后选择 axis-bin-1_4.tar.gz
此外还需要两个常用的jar包,下载途径一中包含了所有所需资源,但是如果你没有下载权限也可以自己在网上找一下。
mail.jar和 activation.jar
2、环境变量配置
2.1 jdk环境变量配置,如果已经配置可以略过
参考:http://blog.****.net/bestcxx/article/details/52300559
2.2 axis1.4 环境变量配置
用户变量和系统变量都要配置一下
·AXIS_HOME
AXIS_HOME D:\axis-1_4 (注:这一条要根据你实际的路径配置axis-1_4的位置)
·AXIS_LIB
AXIS_LIB %AXIS_HOME%\lib
·AXISCLASSPATH
AXISCLASSPATH %AXIS_LIB%\axis.jar;%AXIS_LIB%\axis-ant.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\wsdl4j-1.5.1.jar
·classpath,这个在配置jdk的环境变量的时候已经配置了,但是那是jdk的,现在在后面追加AXISCLASSPATH、mail.jar、activation.jar的路径
classpath .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%AXISCLASSPATH%;%AXIS_LIB%\activation.jar;%AXIS_LIB%\mail.jar;
检查下:cmd echo %AXIS_HOME% 等等,看配置的是否生效。
3、你一定安装了tomcat服务器
在D:\axis-1_4\webapps 下你会发现一个项目 axis ,将之复制到tomcat的webapps
目录下(我的是D:\tomcat7\webapps),然后启动服务器
4、Axis1.4 自带的 axis项目访问
Tomcat服务器启动之后,在浏览器中访问:
显示如下页面说明系统部署正常,接下来我们将以这个axis项目为中介逐步在一个独立的项目中完成webservice服务的实现。
5、jws方式发布 webservice服务
这种方式发布webservice服务需要以axis这个项目为载体。
大致的流程是,编写一个没有package包路径的java文件,比如HelloJWS.java,然后直接重命名为HelloJWS.jws
将这个文件复制到D:\tomcat7\webapps\axis 目录下
内容如下(再强调一下,不能有package包路径):
public class HelloJWS{
public String getSayHello(String name,int age){
return "Hello "+ name+",you are "+age+" years old.";
}
}
文件结构如下:
然后,服务器也不用重启,直接在地址栏中访问
http://localhost:8080/axis/HelloJWS.jws
你会看到
点击 Click to see the WSDL , 看到下面的内容说明你的JWS式服务发布成功了。
可以放大图片查看基本含义。
6、调用已经发布的webservice 服务
有一种是直接在代码中调用,还有一种是生成客户端代码,后者的优势是可以调用的方法名可以直接通过IDE代码提示获知,前者则需要以String字符串的形式体现出来。
6.1 使用代码调用发布的webservice服务
6.2 生成webservice客户端调用服务
首先,你需要一点点的DOS系统的操作知识(下面所有需要输入的内容都仅含双引号内的内容,此外注意空格的存在)。
打开cmd :即启动dos系统。
打开盘符:比如D盘,输入 “D:”,然后按enter键。
打开某个文件:“cd 文件名” ,这里有个小窍门,比如有个文件叫filename ,输入 “f”之后 按tab 键,系统会自动提示文件名全称。
如果你想看当前目录下有哪些文件,直接 输入 “dir”, 然后按enter键。
返回上一层目录: 输入 “cd ..”。
DOS 操作的东西这么点就够了。
在DOS中使用cd命令,打开HelloJWS.jws所在的文件夹,注意这一点十分重要
D:\tomcat7\webapps\axis>
然后输入命令行,中间是个空格,第一部分是固定的,第二行是不是很熟悉?放到浏览器中看一下就知道了。
Java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java
http://localhost:8080/axis/HelloJWS.jws?wsdl
可以使用复制粘贴来完成这个操作,之后按 enter 键,正常来说会看到下面的景象,就是什么也没有发生,事实上,打开下面的目录,你会发现多出一个文件夹,这个文件夹可以加到你的其他java项目中,像调用一般类一样调用你刚才发布的webservice方法。
先看下生成的文件夹:
看看里面的结构
下面演示如何调用刚刚生成的webservice 客户端代码,当然,你需要有一个java的web项目,还需要把axis这个项目中的jar包添加到这个项目的lib路径中。
下面的例子将在myeclipse 中实现服务的调用过程。
新建一个web project ,然后把刚才生成的客户端的文件夹整个复制到src目录下
然后,报错了,别担心,把jar包考到lib路径下,或者直接设置路径(建议这样,节约存储空间)
恢复正常
然后新建一个java测试类HelloJWSTest.java
HelloJWSTest.java代码内容如下
运行结果如下
运行正常,但是提示有个class文件无法解析,我们把mail.jar也加入到路径中,或者拷贝到本项目的lib包中,再次运行测试方法shift+alt+d+t,就完全正常了。
为了之后不再出现其他问题,顺便把activation.jar 也加入到路径中。
6.3然后介绍一下使用eclipse这个IDE自动生成客户端的方法
完成
延伸,可能我测试环境和生产环境的url是不同的,客户端应该更自由些
回到myeclipse的项目中
在HelloJWSServiceLocator.java中
添加一个带参数的构造方法
7、WSDD发布webservice
在使用JWS发布webservice服务的时候,尽管我们再axis这个项目中添加了一项服务,但是去访问http://localhost:8080/axis/servlet/AxisServlet的时候,并不能发现我们刚才发布的服务,反过来说,我们把HelloJWS.jws这个文件的存在是不可知的,如果我们添加一个服务就可以通过http://localhost:8080/axis/servlet/AxisServlet来看到,移除这个服务这里就减少,显然这样更加有利于我们对项目的管理。所以,就涉及到另一种更为复杂也更为常用的webservice服务的发布方式,WSDD式的发布。
我们还是在helloworld项目中进行操作,不同的是这次我们将允许package包的存在。
这个服务将先被添加到axis 项目中,然后最终会直接在helloworld 项目中被访问。
新建java文件,HelloWSDD.java
HelloWSDD.java的内容如下,将提供webservice的对外发布的方法:
然后启动一下项目,实质上是编译一下项目,获取class文件
复制 stu这个文件夹到D:\tomcat7\webapps\axis\WEB-INF\classes
然后编写两文件,分别为deploy.wsdd和undeploy.wsdd,当然名字不是固定的,你可以自定义。
deploy.wsdd的内容如下
undeploy.wsdd的内容如***意service的name就是deploy.wsdd中设定的内容)
编写完毕后将这两个文件复制到D:\tomcat7\webapps\axis\WEB-INF
然后访问一下http://localhost:8080/axis/servlet/AxisServlet
如图
然后在DOS中操作
打开axis的WEB-INF(D:\tomcat7\webapps\axis\WEB-INF)
输入
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -l http://localhost:8080/axis/services/HelloWSDD deploy.wsdd
为了防止报错,mail.jar 和 activation.jar 复制 到axis这个项目下的lib文件夹下
按enter键
运行结果如下:
然后看下路径D:\tomcat7\webapps\axis\WEB-INF
多了一个文件server-config.wsdd 说明成功了。
然后再次访问一下链接http://localhost:8080/axis/servlet/AxisServlet
多了一个服务有木有,说明WSDD发布成功了,点进去看看,访问的方法前面已经说过,自己访问看看吧
然后再次回到DOS窗口
D:\tomcat7\webapps\axis\WEB-INF>
输入下面的命令行
java org.apache.axis.client.AdminClient undeploy.wsdd
按enter 键
然后再次访问一下链接
http://localhost:8080/axis/servlet/AxisServlet
刚才WSDD发布的服务HelloWSDD已经从列表中去掉了
8、在自己的项目中使用WSDD方式发布webservice服务
我们已经在axis项目中实现了以jws方式和wsdd方式发布简单的webservice服务,下面将演示如何在我们自己的项目中以wsdd方式发布webservice服务(jws式的就不实用了)。
首先在我们自己的项目中引入足够的jar包
然后把刚才的两个文件 deploy.wsdd 和 undeploy.wsdd复制到项目helloworld的WEB-INF文件夹中
然后需要对web.xml 的内容做出处理
如果你还记得axis 这个项目,把他的web.xml文件找出来,复制里面的内容,替换掉helloworld的web.xml (头部可以保留编码格式<?xml version="1.0" encoding="UTF-8"?>,内部的AdminServlet可以注释掉,尽管没有啥影响)
然后启动项目(如果你不想程序报错,就把刚才为访问axis项目而启动的tomcat服务器关闭掉,然后再去启动项目,我是在myeclipse中直接启动的,而且我myeclipse的tomcat端口是8085)
我们再次来到DOS环境,不过这次需要打开的是helloworld的WEB-INF,我们需要deploy.wsdd和undeploy.wsdd
输入刚才一模一样的命令,噢,不 ,你现在的项目是helloworld,不是axis,而且要注意你的端口号是不是8080,我的测试环境端口是8085
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -l http://localhost:8085/helloworld/services/HelloWSDD deploy.wsdd
然后访问http://localhost:8085/helloworld/servlet/AxisServlet
点进去
然后是去掉刚才添加的wsdd服务
,回到DOS环境
输入命令
java org.apache.axis.client.AdminClient undeploy.wsdd
如果是这个项目是发布在axis这个项目中的话,这个命令是OK的,但是如果失败了,也不要担心,换成下面的命令试试
java org.apache.axis.client.AdminClient undeploy.wsdd -l http://localhost:8085/helloworld/servlet/AxisServlet undeploy.wsdd
再次访问http://localhost:8085/helloworld/servlet/AxisServlet
服务成功去除了
9、常见问题解决
9.1 jar包错误
解决办法是把必须的那几个jar包添加到路径中。
9.2 jws发布失败
看看是不是文件内部有 package com.demo.test 类似的,jws 发布是不允许有包路径的。
9.3wsdd 找不到wsdd路径
在你DOS当前路径下输入 “dir”+enter键,看是否有wsdd文件,如果没有wsdd文件就再看下DOS中打开文件夹的教程,否则就去除路径中的中文试一下。
9.4 404等错误
看你的环境是否启动了服务器,服务器中是否有要访问的项目,访问路径是否正确,端口号是否正确。
10、wsdd命令的作用是什么?如何在使 项目名.war 具备可访问的webservice服务——直接编辑server-config.wsdd文件
作用是在与wsdd通路径下产生一个server-config.wsdd文件,我们添加wsdd服务或者去除wsdd服务本质上都是对这个文件内容的修改
但是需要注意的是,这个文件默认是不存在的,而且,即便是在ide环境中调用了tomcat可以访问wsdd发布的服务,在直接导出的项目名.war中也不包含这个文件。
也就是说:如果想要生成的项目名.war 在tomcat中发布后可以被访问到webservice服务,必须在项目的sources目录下增加server-config.wsdd文件
技巧就是,直接把tomcat中使用wsdd命令自动生成的server-config.wsdd复制到当前的目录下,或者在生产环境运行wsdd发布服务命令。