我使用的是jdk6自带的webservice,使用注解。

编写一个开放的借口并实现:

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

实现类:

import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
@WebService(name = "UserService", serviceName = "UserService", targetNamespace = "http://cas.webservice.user/client")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class UserServiceImpl implements UserService{
;
                                                                                                                                 
    public String saveUser(String username, String password) {
        System.out.println(username+" : "+password);
         return username + " : " + password;
                                                                                                                                      
    }
}

@是注解,必须要有,下面会用到注解里面的东西。

webservice的发布:

public class TestMain {
    public static void main(String[] args) {   
        Endpoint.publish("http://127.0.0.1:9527/UserService",new UserServiceImpl());
    }
}

其中9527端口后面的UserService是注释中serviceName的内容。

然后,运行一下main方法。

在你的桌面开始位置输入cmd命令,输入如下内容:

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

会在C:\Users\Jhon(计算机的用户名)\user\webservice\cas\client下生成“.class和.java”的文件。

重新建立一个工程,把cas下的client文件夹复制到新工程的src下,新建一个测试类,代码如下:

public class TestMain {
    public static void main(String[] args) {
        UserService_Service uss=new UserService_Service();
        UserService user=uss.getUserServicePort();
        System.out.println(user.saveUser("你好", "yes i do"));
        }
}

会在控制台输出:你好 yes i do

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