加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WebService认识一

发布时间:2020-12-16 23:43:12 所属栏目:安全 来源:网络整理
导读:前言: 感觉好悲剧,先是下了个Apatche?CXF3.0.0,然后根据官方的文档写了代码,但是发现编译都通不过,想想肯定是Jar包的问题,但是官方用的Maven的方式配置的Jar,个人对Maven不熟,而且网上根本就没这个版本的资料,无奈:换了个2.7.7版本,然后发现自己

前言:感觉好悲剧,先是下了个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.10libendorsed目录下的jar包。另外也可以通过升级JDK版本来解决

2:控制台其它异常,基本都是少包。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读