查看“Web Services:简单的Java示例”的源代码
←
Web Services:简单的Java示例
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:Web Services]] == 关于 == 一个完整的Web服务包括以下步骤: # “Web 服务提供者”设计实现 Web 服务,并将调试正确后的 Web 服务通过“Web 服务中介者”发布,并在 '''UDDI''' 注册中心注册; (发布) # “Web 服务请求者”向“Web 服务中介者”请求特定的服务,中介者根据请求查询 UDDI 注册中心,为请求者寻找满足请求的服务; (发现) # “Web 服务中介者”向“Web 服务请求者”返回满足条件的 Web 服务描述信息,该描述信息用 '''WSDL''' 写成,各种支持 Web 服务的机器都能阅读;(发现) # 利用从 Web 服务中介者返回的描述信息生成相应的 '''SOAP''' 消息,发送给“Web 服务提供者”,以实现 Web 服务的调用;(绑定) # Web 服务提供者按 SOAP 消息执行相应的 Web 服务,并将服务结果返回给“Web 服务请求者”。(绑定) * 创建服务端/客户端项目,项目可以是 Java Web 项目,也可以是普通的 Java 项目: *: [[File:WebServices:Java:创建项目.png|400px]] === 服务端 === # 通过 '''javax.jws.WebService''' 注解提供服务; # 通过 '''javax.xml.ws.Endpoint''' 类的 '''publish''' 方法来发布服务,并提供发布的地址以及发布的服务类; 代码: <syntaxhighlight lang="Java" highlight="3,4,6"> package com.eijux.wsServer; import javax.jws.WebService; import javax.xml.ws.Endpoint; @WebService public class Function { // 可以显示指定服务的“operationName”(client中调用) @WebMethod(operationName="sayHello1") public String sayHello(String userName) { return "Hello,"+userName+"!"; } @WebMethod(operationName="sayHello2") public String sayHello(){ return "Hello World!"; } // 如果不指定“operationName”,则与方法名相同 @WebMethod public String transWords(String words){ String res = ""; for(char ch : words.toCharArray()){ res += ch+","; } return res; } public static void main(String[] args) { // 使用Endpoint(终端)类发布webservice Endpoint.publish("http://localhost:8089/service/function", new Function()); System.out.println("Publish Success"); } } </syntaxhighlight> 服务发布成功后,访问发布的地址: : [[File:WebServices:Java:发布服务.png|800px]] 点击链接,打开 WSDL 配置: : [[File:WebServices:Java:WSDL 配置.png|800px]] === 客户端 === 通过工具生成客户端代码: # 命令行工具: #: <syntaxhighlight lang="bash" highlight=""> wsimport -d .class文件的输出目录 -s .java文件的输出目录 -p “生成类所在包名” -keep “wsdl发布地址” </syntaxhighlight> #: 示例: #: <syntaxhighlight lang="bash" highlight=""> wsimport -s D:\Workspaces\JAVA\TheClient\src -p com.eijux.wsClient -keep http://localhost:9095/service/function?wsdl </syntaxhighlight> # Eclipse工具: #: [[File:WebServices:Java:Eclipse工具使用1.png|400px]] #: [[File:WebServices:Java:Eclipse工具使用2.png|400px]] #: [[File:WebServices:Java:Eclipse工具使用3.png|400px]] #: [[File:WebServices:Java:Eclipse工具使用4.png|400px]] 代码: <syntaxhighlight lang="Java" highlight="3,4,6"> package com.eijux.wsClientTest; import javax.rmi.RemoteException; import javax.xml.rpc.ServiceExceptipn; // 如果 Client 与生成的代码不在同一目录,需要引入对应的包 // 需要引入的包在生成代码中 import com.eijux.wsServer.Function; import com.eijux.wsServer.FunctionService; import com.eijux.wsServer.FunctionServiceLocator; public class TestWs { public static void main(String[] args){ try{ //Function f = new FunctionService().getFunctionPort(); Function f = new FunctionServiceLocator().getFunctionPort(); System.out.println(f.sayHello1("eijux")); System.out.println(f.sayHello2("")); System.out.println(f.getValue("zl")); } catch(ServiceExceptipn e){ e.printStackTrace(); } catch(RemoteException e){ e.printStackTrace(); } } } </syntaxhighlight> == FAQ == 可能的异常: # 服务端:<code>runtime modeler error: Wrapper class com.eijux.wsServer.jaxws.GetValue is not found. Have you run APT to generate them?</code> #: JDK 版本过低(低于1.6.0_17):调整该服务端项目所引用的 JDK 版本。 # 生成命令:<code>directory not found: D:\Workspaces\JAVA\The Client\src</code> #: 路径有空格。 # 生成命令:<code>[ERROR] failed.noservice=Could not find wsdl:service in the provided WSDL(s):</code> #: 生成命令的“wsdl发布地址”末尾缺少“?wsdl”。 == 参考 == # [https://www.cnblogs.com/AlanLee/p/6933073.html cnblogs:WebService入门实例教程] # [https://blog.csdn.net/gtlishujie/article/details/73527711 csdn:Java WebService 简单小实例] # [https://www.jianshu.com/p/694aee68725d 简书:极致精简的webservice例子--Java版]
返回至“
Web Services:简单的Java示例
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息