WebService是提供特定服务的架构技术,通过标准的Web协议提供服务,其目的是保证不同平台的应用服务可以相互操作。目前比较流行的实现是使用.NET和JAVA两种语言技术,并且两种实现语言可以相互操作;
下面主要围绕通过JAVA语言来介绍Webservice的定义和调用,通过JAVA语言开发WebService的方式又分为Axis、axis2、Xfire、CXF以及JWS。每种方式实现都有各自的特点,由于本人使用CXF的方式比较熟练,而且,CFX和Spring无缝结合,所以下面重点介绍以CFX方式的实现。
由于WebService实现分为服务端和客户端两种开发模式,接下来介绍WebService服务端开发、客户端开发及实例测试。
- 环境准备
JDK1.6及以上,需要的JAR文件有:commons-logging-1.1.1.jar、cxf-2.4.3.jar、neethi-3.0.1.jar、spring-aop-3.0.5.RELEASE.jar、spring-asm-3.0.5.RELEASE.jar、spring-beans-3.0.5.RELEASE.jar、spring-context-3.0.5.RELEASE.jar、spring-context-support-3.0.5.RELEASE.jar、spring-core-3.0.5.RELEASE.jar、spring-expression-3.0.5.RELEASE.jar、spring-web-3.0.5.RELEASE.jar、wsdl4j-1.6.2.jar、xmlschema-core-2.0.1.jar。
1.服务端开发
自定义接口类
package cn.test.ws.service;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public interface GreetingService {
public String welcome(@WebParam(name="username") String username);
public int getNum(@WebParam(name="number") int number);
}
定义接口实现类
package cn.test.ws.service.impl;
import cn.test.ws.service.GreetingService;
public class GreetingServiceImpl implements GreetingService {
@Override
public String welcome(String username) {
System.out.println("服务端的方法为:greeting()");
return "Hell0 "+username+",欢迎你调用JAVA下的WebService服务!";
}
@Override
public int getNum(int number) {
System.out.println("服务端的方法为:getNum()");
return number;
}
}
Spring.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<jaxws:server id="GreetingService"
serviceClass="cn.test.ws.service.GreetingService"
address="/GreetingService">
<jaxws:serviceBean>
<bean class="cn.test.ws.service.impl.GreetingServiceImpl" />
</jaxws:serviceBean>
<jaxws:features>
<bean class="org.apache.cxf.feature.LoggingFeature" />
</jaxws:features>
</jaxws:server>
</beans>
2.客户端开发
public static void main(String[] args) {
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
String wsUrl = "http://127.0.0.1:8080/WS/GreetingService?wsdl";
String method ="welcome";
String method2 = "getNum";
try {
Client client = dcf.createClient(wsUrl);
Object[] objects =client.invoke(method,"TEST");
Object[] numbers =client.invoke(method2,6);
System.out.println(objects[0].toString());
System.out.println(numbers[0]);
} catch (Exception e) {
e.printStackTrace();
}
}
3.实例测试
WebService测试可以使用上述客户端main方法进行测试,也可通过在浏览器中进行测试,还有专门的webservice测试工具等众多方式进行测试。
在浏览器中输入http://IP:端口/项目名称/GreetingService?wsdl即可看到已发布的服务端信息,并且通过输入制定参数显示服务端返回的信息,如:http://IP:端口/项目名称/GreetingService/welcome?username=test。