锁定老帖子 主题:jdk6原生态webservice
精华帖 (2) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-06-30
最后修改:2011-06-30
开发过程如下: 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,UserService_Service。 5,调用方式如下: UserService_Service userService=new UserService_Service(); UserService user=userService.getUserServicePort(); System.out.println(user.saveUser("afei2","yes ido"));。 注意的地方: 一是在发布的类(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。 权当记录用 高手可以讨论讨论 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-06-30
建议你将发布的 IP 设成 0.0.0.0 试试
|
|
返回顶楼 | |
发表时间:2011-06-30
ptma 写道 建议你将发布的 IP 设成 0.0.0.0 试试
会怎样? |
|
返回顶楼 | |
发表时间:2011-07-02
AngelAndAngel 写道 在发布的类(userServiceImpl)中假如带有接口属性,并且有其getter/setter,那么发布会失败。
在不需要发布的方法上加注释:@WebMethod(exclude=true) 详细参见:http://sjsky.iteye.com/blog/733188 |
|
返回顶楼 | |
发表时间:2011-07-02
AngelAndAngel 写道 ptma 写道 建议你将发布的 IP 设成 0.0.0.0 试试
会怎样? 不绑定本机IP,jboss有这种写法 |
|
返回顶楼 | |
发表时间:2011-07-02
sjsky 写道 AngelAndAngel 写道 在发布的类(userServiceImpl)中假如带有接口属性,并且有其getter/setter,那么发布会失败。
在不需要发布的方法上加注释:@WebMethod(exclude=true) 详细参见:http://sjsky.iteye.com/blog/733188 是说应该有这个东西 没深入看 谢谢你了 |
|
返回顶楼 | |
发表时间:2011-07-02
caizi12 写道 AngelAndAngel 写道 ptma 写道 建议你将发布的 IP 设成 0.0.0.0 试试
会怎样? 不绑定本机IP,jboss有这种写法 生产环境肯定不会是本机的 关键是我不知道他让我设置成 0.0.0.0 是何缘由 |
|
返回顶楼 | |
发表时间:2011-07-02
webservice不具备可操作性。
按照远程调用的观点来看,最少应该能够生成本地残根,才可以透明编程,现在webservice还没看到相关的东西可以生成本地残根。 |
|
返回顶楼 | |
发表时间:2011-07-02
jackra 写道 webservice不具备可操作性。
按照远程调用的观点来看,最少应该能够生成本地残根,才可以透明编程,现在webservice还没看到相关的东西可以生成本地残根。 什么是本地残根?求高手解释 |
|
返回顶楼 | |
发表时间:2011-07-03
jackra 写道 webservice不具备可操作性。
按照远程调用的观点来看,最少应该能够生成本地残根,才可以透明编程,现在webservice还没看到相关的东西可以生成本地残根。 怎么会没有呢 不同语言解析wsdl 肯定会生成与本语言相应的客户端,调用就ok了,已经很透明了 |
|
返回顶楼 | |