前言:感觉好悲剧,先是下了个Apatche CXF3.0.0,然后根据官方的文档写了代码,但是发现编译都通不过,想想肯定是Jar包的问题,但是官方用的Maven的方式配置的Jar,个人对Maven不熟,而且网上根本就没这个版本的资料,无奈:换了个2.7.7版本,然后发现自己还是挺悲剧的,直接讲这个版本的资料也很少,有的还很坑。
操作:
一:下载Apatche CXF2.7.7,然后解压。
二:在Eclipse中建立工程,导入如下Jar包(最简):
三:建立WebService接口及其实现:(注:User对象及UserDaoImp的实现不是本文的重点:可以参考博客:http://blog.csdn.net/wjl_mgqs/article/details/22882807,本文代码下载地址:http://download.csdn.net/detail/wjl_mgqs/7141871)
@WebService
public interface UserService {
/**
* 列出用户名
* @return
*/
public List<String> listUserName();
/**
* 根据邮箱查出用户信息
* @param name
* @param email
* @return
*/
public List<User> findUser(@WebParam(name="email")String email);
}
@WebService(endpointInterface="org.wjlmgqs.service.UserService",serviceName="user")
public class UserServiceImp implements UserService{
@Override
public List<String> listUserName() {
return new UserDaoImp().listUserName();
}
@Override
public List<User> findUser(String email) {
return new UserDaoImp().findUser(email);
}
}
四:启动服务及客户端
public class UserWebService {
public static void main(String[] args) {
WebLogger.showInfo("开始发布WebService");
UserService userService= new UserServiceImp();
String address="http://localhost:8080/user";
Endpoint.publish(address,userService);
try {
Thread.sleep(1000*60*5);
} catch (InterruptedException e) {
e.printStackTrace();
}
WebLogger.showInfo("WebService发布结束");
}
}
public class UserWebServiceClient {
public static void main(String[] args) {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(UserService.class);
factory.setAddress("http://localhost:8080/user");
UserService userService = (UserService) factory.create();
List<User> findUser = userService.findUser("wang");
for(User u : findUser){
System.out.println(u.toString());
}
}
}
五:最终运行结果
遇到的问题解决:
1:运行的过程中可能出现异常:Exception in thread "main" java.lang.LinkageError: 正在从引导类加载器加载 JAXB 2.1 API, 但此 RI (来自jar:file:/E:/dd/Eclipse/WebServiceDemo/WebContent/WEB-INF/lib/jaxb-impl-2.2.6.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) 需要 2.2 API。请使用授权目录机制将 jaxb-api.jar 放在引导类加载器中。
原因:JDK版本过低
解决办法:在main方法中运行:System.out.println(System.getProperty("java.endorsed.dirs")); 输出jdk中jre的lib路径,然后在改目录下建立endorsed,并放置apache-cxf-2.7.10\lib\endorsed目录下的jar包。另外也可以通过升级JDK版本来解决
2:控制台其它异常,基本都是少包。