这几天在研究webservice的创建及调用,今天刚好完成了一个简单的Demo,将源码及心得分享出来希望对新手有帮助。
java中开发webservice的方法有很多(利用jdk web服务api实现;xfire;axis1.4;axis2等),我这边使用的ApacheCXF+Spring,远程调用使用的是axis.其他方式也试过,个人觉得这样搭配比较方便的开发webservice
建立web工程,工程目录结构如下:
首先配置xml文件及spring.xml文件配置
Spring.xml文件配置:这里需要注意的是引入cxf支持及webservice发布路径指定到接口名
webservice开发,这里仅需编写一个接口及实现类,在类头写上@WebService注解即可,贴上本工程中的接口及实现类:
package webService.service;
import javax.jws.WebService;
/**
* 简单webservice Demo
* @author xyl
*
*/
@WebService
public interface DemoService {
public int getcount();
public String getUserName(String username);
}
实现类:
package webService.service.impl;
import javax.jws.WebService;
import webService.service.DemoService;
/**
* webservice实现类
* @author xyl
*
*/
@WebService
public class DemoServiceImpl implements DemoService {
//添加属性
private int count=520;
@Override
public int getcount() {
// TODO Auto-generated method stub
return count;
}
@Override
public String getUserName(String username) {
// TODO Auto-generated method stub
return "调用webservice接口成功,返回的结果是"+username;
}
}
完成以上步骤后启动Tomcat即可,如果webservice发布成功,在地址栏中输入http://localhost:8080/WcxfDemo/serivces即可出现如图所示:
图上则暴露出接口方法及wsdl路径.
接下来是客户端测试类编写:
我给我的测试程序写了一个工具类,仅仅是个初版,还有很多的问题,现在这个仅适用于返回类型为基本数据类型及解决了调用C#webservice时的返回类型在java中不匹配的问题,因为不确定webservice的返回类型,所以我这边用的泛型,提供一个方法解析泛型类型。代码如下:
import org.apache.axis.client.Call; import org.apache.axis.client.Service;
这里注意需要导入的包是:
axis.jar
commons-discovery-0.2.jar
commons-logging.jar
wsdl4j-1.6.2.jar 否则创建service对象时会出错。
main程序如下:
在main程序里面只要配置一下工具类中方法的各项参数即可,因为如果调用的C#webservice有时会存在类型在java中不匹配的问题(我这边仅仅是做的调天气webservice做的测试),所以我这边用的vector做的返回类型,在判断泛型类型时做了特殊判断。结果如下:
下面这段代码是测试本地cxf发布的webservice,代码及运行结果如下:
仅供参考,不喜勿喷.
附上工程代码:WebServiceDemo