之前接触过别人写的webservice,自己一直似懂非懂,最近花了点天时间来简单研究了下,也记个笔记来记录下,万一以后用到呢O(∩_∩)O~!
一、装备工作
1、下载需要的jar包(包含附件中)
2、javaEE-eclipse+tomcat7.0的安装,此处就不再说了。
二、创建
1、Eclipse创建一个web工程
2、创建好web工程后将下载好的jar包拷贝到WEB-INF/lib下面,在WEB-INF目录下建立web.xml并加入axis1.4的相关配置,这个工程是一个简单的纯webservice工程,没有整合Struts、spring 等所以我将web.xml所有配置贴出来。
Apache-Axis
AxisServlet
org.apache.axis.transport.http.AxisServlet
AxisServlet
/servlet/AxisServlet
AxisServlet
*.jws
AxisServlet
/services/*
inc
text/plain
index.html
/axis2-web/index.jsp
404
error404.jsp
500
error500.jsp
3、编写服务端的业务代码,在此只编写2个简单的输出字符串的方法。包的结构如下:
SayHelloService 代码如下:
package com.test;
public interface SayHelloService
{
public String sayHelloToMr(String info);
public String sayHelloToMiss(String info);
}
SayHelloServiceImpl 类的代码如下
package com.test;
public class SayHelloServiceImpl implements SayHelloService{
@Override
public String sayHelloToMr(String info) {
String str = "Hello Mr."+info+"!";
return str;
}
@Override
public String sayHelloToMiss(String info) {
String str = "Hello Miss."+info+"!";
return str;
}
}
4、业务代码编写好后,就开始编写创建webservice最关键的deploy.wsdd文件。在WEB-INF目录下建立deploy.wsdd,内容如下:
5、将工程export出war包,并发布到tomcat中,发布完毕后进入工程目录secondWebservice\WEB-INF下建立发布webservice的批处理文件deploy.bat 内容如下:
set AXIS_LIB=E:\apache-tomcat-7.0.57\webapps\secondWebservice\WEB-INF\lib //这个是工程发布后axis jar 包的目录 根据自己tomcat安装位置决定(此处注释用,不要写到deploy.bat中)
set AXISCLASSPATH=%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\wsdl4j-1.5.1.jar
java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient -lhttp://localhost:8080/secondWebservice/services/mySecondWebservice deploy.wsdd //标红的部分就是将来访问webservice的地址(此处注释用,不要写到deploy.bat中)
6、打开cmd命令窗口 进入发布好的工程的 deploy.wsdd 文件同级目录下运行deploy.bat 文件 如果如下图:则证明发布成功了, deploy.wsdd 文件同级目录下 会新增一个 server-confg.wsdd 文件
这个一步可是最关键的一步,我也是经历了各种错误后,才找到了正确的方法,这个地方说下,为什么要先打war包,发布到tomcat中后再运行deploy.bat发布webservice ,一开始我也是按照网上的方法,在 集成在eclipse中的tomcat启动工程详,然后进入eclipse的workspace中相应的目录运行deploy.bat文件,虽然这样也能发布成功,也能访问,但是 server-confg.wsdd 这个文件不会出现 deploy.wsdd 文件 的同级目录中,而是跑到了eclipse 的tomcat插件的某个子目录中,所以我为了方便就直接打的war包,并采用这种方式发布。
发布完成后,测试下发布成功没有:
在浏览器地址中输入:http://localhost:8080/secondWebservice/services/mySecondWebservice?wsdl 出现下面页面则证明发布成功了!
接下来我们将 server-confg.wsdd 这个文件拷贝出来放到我们eclipse中工程的WEB-INF\ 下,以后打war包时就会自动包含这个文件不用再生成了(当然,如果修改了webservice的名字,或者在webservice中新增了方法,需要重新发布的情况除外)。
7、服务端的部署算是完成了,接下来我们写个客户端的程序来调用下,建立一个普通的java类 代码如下(注意导入相应jar包,和上面jar的一样):
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class FirstWbClient {
/**
* @param args
*/
public static void main(String[] args)
{
try {
String endPoint = "http://localhost:8080/secondWebservice/services/mySecondWebservice";
Service service = new Service();
Call call = (Call)service.createCall();
call.setOperationName(new QName(endPoint,"sayHelloToMr"));
call.setTargetEndpointAddress(new URL(endPoint));
String result = (String)call.invoke(new Object[]{"Simth"});
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出 Hello Mr.Simth! 证明调用成功 如下图:
三、取消发布
此处贴出网上给出的方法,但是我一直没试成功,运行undeploy.bat 文件时老是出现 No such operation 'undeployment' 的错误,待以后解决吧!
1、在deploy.wsdd的同级目录下建立undeploy.wsdd的文件,内容如下:
set AXIS_LIB=E:\apache-tomcat-7.0.57\webapps\secondWebservice\WEB-INF\lib
set AXISCLASSPATH=%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\wsdl4j-1.5.1.jar
java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient -lhttp://localhost:8080/secondWebservice/services/mySecondWebservice undeploy.wsdd
3、进入发布好的工程的 undeploy.wsdd 文件同级目录下运行undeploy.bat 文件,如果不报错,取消成功,并测试还是否能够访问!但就是这一步,我始终报下面的错误(还望知道或者解决的童鞋在评论中告知下,感谢!):
四、总结
真实的开发中,应该将deploy.wsdd、undeploy.wsdd以及生成的wsdlwe专门保存在工程的一个目录中,这样打war包时就会将这些文件一起打包进去,这样方便以后webservice 的发布与取消,只需要的服务器上执行相应的命令(执行bat文件)就可以了。
至于webservice的高级属性,传复杂的数据类型,就等以后再慢慢看吧!写的好累啊,我擦
最后发现 居然不能上传 附件。。。。。。!!!!!jar包参见我上传的资源吧!