我使用的是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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。