前言:感觉好悲剧,先是下了个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:控制台其它异常,基本都是少包。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。