cfx 是 java 平台下非常优秀的WebService框架,今天上手学习了一下,写了一个例子分享给大家。
cfx 官网:http://cxf.apache.org/
开发环境:
MyEclipse10+JDK7.0+cfx3.0.3+Win7
1.接口 - CalculatorService
package com.test.service;
import javax.jws.WebService;
import com.test.domain.*;
@WebService
public interface CalculatorService {
public int Add(int x,int y);
public boolean Validate(User user);
}
2.实现接口
package com.test.service.impl;
import javax.jws.WebService;
import com.test.domain.User;
import com.test.service.*;
@WebService(endpointInterface="com.test.service.CalculatorService",serviceName="calculator")
public class CalculatorServiceImpl implements CalculatorService {
public int Add(int x, int y) {
// TODO Auto-generated method stub
return x + y;
}
public boolean Validate(User user) {
// TODO Auto-generated method stub
return user.getId() > 0;
}
}
3.服务端
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
import com.test.service.*;
import com.test.service.impl.*;
@WebService
public class Server {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("web service start");
CalculatorService implementor = new CalculatorServiceImpl();
String address = "http://localhost:8888/calculator"; //这是上面在注解中已经声明过的URL
Endpoint.publish(address, implementor);
System.out.println("web service started");
}
}
4.关于jar包
由于不清楚哪些包会用到,把apache-cxf-3.0.3\lib下面的jar包全部导入到项目中,如果有人清楚这方面的内容,欢迎留言。
5.发布服务
注意:运行前确认服务端口(这里是8888)没有被占用,可以通过如下方式查看并关闭端口。
服务器console输出
访问webservice
6.客户端
我们使用wdsl2java工具帮助生成客户端辅助类。
在E:\MyEclipseProject\software\apache-cxf-3.0.3\bin生成一个com包
把这个com包导入到工程中(红色方框内是com包里面的内容)
import com.test.service.CalculatorService;
import com.test.service.User;
import com.test.service.impl.Calculator;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Calculator calc = new Calculator();
CalculatorService service = calc.getCalculatorServiceImplPort();
int result = service.add(3, 7);
System.out.println(result);
/*
User user = new User();
user.setId(100);
user.setName("justin");
boolean r = service.validate(user);
System.out.println("The user is "+ r);
*/
}
}
7.运行客户端
运行结果正确!
8.总结:
1)如何传递对象还没有实现,有待进一步研究...
2)目前不确定哪些cxf jar 包是需要的.
3)红色输出非错误,是日志信息.
4)cxf 通常与spring 结合使用,还有待研究...
5)cxf 之前的版本都没有通过注解的方式实现,需要配置xml文件,这种方式后来被注解的方式取代(spring3.0出现之后),注解很强大,和.NET 很类似。