JDK6 原生态 webservice

近期做cas 单点登录的时候由于要同步用户信息,所以准备在里面加个
webservice,开放端口给子系统,于是想用jdk6自带的webservice,使用注解。

开发过程如下:

  1. 保证使用的是jdk6。
  2. 编写开放出来的接口并实现,如下

    public interface UserService {
    public String saveUser(String username,String password);
    }

    import javax.jws.WebService;
    import javax.jws.soap.SOAPBinding;
    import javax.sql.DataSource;

    import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;

    @WebService(name = “UserService”, serviceName = “UserService”, targetNamespace = “http://cas.webservice.user/client")
    @SOAPBinding(style = SOAPBinding.Style.RPC)
    public class UserServiceImpl implements UserService {

    private DataSource dataSource;  
    
    private SimpleJdbcTemplate jdbcTemplate;  
    
    private UserServiceImpl() {  
    
    }  
    
    private UserServiceImpl(DataSource dataSource) {  
        this.dataSource = dataSource;  
        this.jdbcTemplate = new SimpleJdbcTemplate(dataSource);  
    }  
    
    public String saveUser(String username, String password) {  
        int count = jdbcTemplate.update(  
                "insert  userinfo(userName,password) values(?,?)", username,  
                password);  
    
        return username + " : " + password;  
    }  
    

    }

  3. 发布webservice。如下

    Endpoint.publish(“http://127.0.0.1:9527/UserService",

    ctx.getBean("wsUserService"));  
    

    //注:这里假如不用spring的话 直接new UserServiceImpl()。

  4. 在你的客户端位置键入命令:

    wsimport -keep http://127.0.0.1:9527/UserService?wsdl  
    

    此时会在此目录生成cas/webservice/user/client/此文件夹,里面生成了你
    需要的客户端调用类UserService,UserServiceService

  5. 调用方式如下:

    UserService_Service userService=new UserService_Service();  
    UserService user=userService.getUserServicePort();  
    System.out.println(user.saveUser("afei2","yes ido"));  
    

    注意的地方:

    1. 在发布的类(userServiceImpl)中假如带有接口属性,并且有其
      getter/setter,那么发布会失败。
    2. 发布的ip假如是127.0.0.1的话localhost是不能访问的,是多少就是多少,
      不过实际项目也不会这样的。
    3. 有的客户端调用的时候也会报错,比如Provider
      com.sun.xml.ws.spi.ProviderImpl not found这个异常,我跟踪代码进
      去,发觉报错的那个jdk版本的Provider和我成功的jdk版本是不一样的,
      在网上搜无答案,直说缺包,我感觉是个小bug。其他的没什么问题。
    4. 因为这里没用任何webservice框架,没有把它嵌入tomcat(假如你需要在
      tomcat环境中),所以端口另开,不能是8080。