Web Service开发:Java Web Service


Web Service开发:Java Web Service Author: Jin.Liu Creation Date: September 9, 2009 Last Updated: October 25, 2009 Document Ref: 错误!未找到引用源。 Version: 1.0 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 文档控制 ii 文档控制 更改记录 3 日期 作者 版本 更改参考 9-Sep-09 Jin.Liu 1.0 无前版本 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 文档控制 iii 内容目录 文档控制 ................................................................................................................................... ii 1. Web Service的认识 ................................................................................................... 2 2. Java Web Service开发 ............................................................................................... 3 2.1. 从WSDL开始创建Java Web Service ................................................................ 3 2.2. 从Java类开始创建Java Web Service .............................................................. 13 3. Java Web Service测试与部署 ................................................................................. 22 3.1. Java Web Service的测试 .................................................................................. 22 3.2. Java Web Service的部署 .................................................................................. 27 4. JDeveloper 11g开发Java Web Service过程中碰到的问题及解决方法 .............. 31 5. 未结与已结问题 ....................................................................................................... 33 未结问题 .......................................................................................................................... 33 已结问题 .......................................................................................................................... 33 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Web Service的认识 2 of 35 1. Web Service的认识 Web Service是基于XML的接口技术;Web Service是不可执行的,它没有执行环境,需 要依赖其他技术来创建执行环境。你只有根据Web Service的特点、功能和能力来重新 考虑你的IT方案,才会获得应有的优点。成功的应用Web Service技术,需要一个对待 技术的思想转变,而不是学了新原理却用旧方法来构建和部署系统。Web Service总是 需要进行技术融合的;因此,不仅要知道Web Service取代了什么,还需要了解Web Service增添了什么。 下面是我对Web Service的运行过程的一个理解: 首先把Web Service定位为一种服务,不是具体的技术,属于概念性的东西。或许把它 理解成一个具有某种功能的系统比较贴切。系统也只是一个概念性的东西,比如:登录 验证系统,从名称上可以知道它的功能,但是它的实现是什么(是基于Java还是.Net或者 更多的其他的编程语言),如何才能用这个系统(是只用输入用户名就可以登录系统还是 即需要输入用户名还需要密码才能登录)。Web Service其实也是一样,也会依赖于一个 具体的实现和一个告诉用户如何去使用的使用说明,而这个具体的实现就是服务的服务 内容和如何用具体技术来做成这样一个服务,使用说明就是服务的描述,由这个描述告 诉大家如何才能使用服务。很显然,光有描述,没有服务的具体实现,这个服务肯定是 不能使用的,就跟系统只有使用说明,但是没有拿计算机技术去做好这个系统之前,这 个使用说明是不能表明系统是可以使用的。Web Service中的这个使用说明就是Web Service的WSDL,具体实现就是如何用编程语言来做成能满足服务的程序。 Web Service的执行跟我们常写的Web应用程序的执行一样,首先客户端提交HTTP请 求,服务器接收请求,服务器处理请求,服务器将处理结果返回给客户端;传输的数据 都是 名称/值 对,数据的传输都是基于HTTP协议。而Web Service也会有这么一个调 用的过程,传输的数据都是 SOAP 消息,数据的传输都是基于SOAP协议。 SOAP的出现是为了简化网页服务器(Web Server)在从XML数据库中提取数据时,无 需花时间去格式化页面,并能够让不同应用程序之间透过HTTP通讯协议,以XML格式 互相交换彼此的数据,使其与编程语言、平台和硬件无关。 SOAP协议使用因特网应用层协议作为其传输协议。SMTP以及HTTP协议都可以用来传 输SOAP消息,但是由于HTTP在如今的因特网结构中工作得很好,特别是在网络防火 墙下仍然工作流畅,所以其更为广泛地被采纳。SOAP亦可以在HTTPS上进行传输。 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service开发 3 of 35 2. Java Web Service开发 开发环境:JDeveloper Studio 11.1.1.1.0 应用服务器:WebLogic 10.3.1 2.1. 从WSDL开始创建Java Web Service WSDL 全称:Web Services Description Language,是一个用来描述 Web 服务和说明如何与 Web 服务通 信的 XML 语言。 注:学习 WSDL 之前需要学习 XML、XML Namespace、XML Schema 三个基础。 WSDL 文件的主要组成元素: 元素 定义 Web Service 执行的操作 Web Service 使用的消息 Web Service 使用的数据类型 Web Service 使用的通信协议 描述于 W3C 工作草案的完整 WSDL 1.2 语法已列在下面: 其中:?表示出现 0..1 次 *表示出现 0..任意次数 +表示出现 1..任意次数 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service开发 4 of 35 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service开发 5 of 35 有了上面的一点基础,下面就从 WSDL 开始,建一个简单的 Java Web Service。 WSDL 文件内容如下: HelloWorld.wsdl 这个 WSDL 文件内容很简单,实现的功能也很简单,输入一个 string,返回一个 string。 有了上面的 WSDL 文件,我们就可以开始做我们的 Java Web Service 了 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service开发 6 of 35 打开 JDeveloper 11g 新建一个空的 Application(File-New): 点击 OK 之后进入创建 Application 页面,输入自己的 Application 名称 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service开发 7 of 35 点击下一步之后会弹出新建一个 project 的页面,输入 project 的名字后点击完成: 新建 Java Web Service From WSDL File: 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service开发 8 of 35 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service开发 9 of 35 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service开发 10 of 35 这里的 Package Name 为有 WSDL 产生的 Java Web Service 所在的 Package;Root Package for Generated Types 为 WSDL 中的 Type 所产生的 Java 类所在的 Package。 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service开发 11 of 35 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service开发 12 of 35 点击 Finish 之后,JDeveloper 的 Project 中会自动生成很多 java 文件,如下图: 打开 SimpleImplImpl.java 文件: 可以看到该 java 文件中已经有很多自动生成好了的代码,我们这里只需要修改 Web Service 的实现部 分,也就是该 Class 的 sayHello 方法。修改如下: 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service开发 13 of 35 public String sayHello(@WebParam(name = "arg0") String arg0) { return "Hello ,"+arg0+" , Welcome to Java Web Service World!"; } Project 源代码: 这样我们从 WSDL 文件开始的简单的 Java Web Service 已经做好了。 当然复杂的 Java Web Service From WSDL 的过程也是这样的。不同的只是来源的 WSDL 文件不同,Web Service 的 Java 实现类的实现方法会不同而已。这种创建 Java Web Service 的过程适合于比较熟悉 WSDL 文件结构的开发人员。 2.2. 从Java类开始创建Java Web Service 在 JDeveloper 11g 中很容易就可以将一个 Java Class 转换成一个 Java Web Service。 同样我们新建一个 Project(过程跟上面一样)。 新建一个 Java Class: 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service开发 14 of 35 JDeveloper 自动为我们生成了如下代码: package cux.java.hello; public class HelloExample { public HelloExample() { super(); } } 我们在里面添加我们自己的方法 welcome(): package cux.java.hello; public class HelloExample { public HelloExample() { super(); } public String welcome(String name){ return "Hello,"+name+",Nice to see you!"; } } 将这个 Class 发布成 Web Service 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service开发 15 of 35 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service开发 16 of 35 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service开发 17 of 35 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service开发 18 of 35 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service开发 19 of 35 点击 Finish 之后,我们可以看到我们的 HelloExample.java 文件会自动加上 java annotation,其 代码如下: package cux.java.hello; import javax.jws.WebService; import javax.xml.ws.BindingType; import javax.xml.ws.soap.SOAPBinding; @WebService(targetNamespace = "http://cux.java.hello/", portName = "HelloExampleSoap12HttpPort") @BindingType(SOAPBinding.SOAP12HTTP_BINDING) public class HelloExample { public HelloExample() { super(); } public String welcome(String name){ return "Hello,"+name+",Nice to see you!"; } } 查看 Java Web Service 的 WSDL 的内容: 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service开发 20 of 35 其内容如下: 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service开发 21 of 35 HelloExampleServi ce.wsdl Project 源代码: 这样我们从 Java 开始的简单的 Java Web Service 已经做好了。 当然复杂的 Java Web Service From Java 的过程也是这样的。不同的只是 Java 实现类的实现方法和 难易程度会不同而已。这种创建 Java Web Service 的过程适合于比较熟悉 Java 语言的开发人员。 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service测试与部署 22 of 35 3. Java Web Service测试与部署 开发完Java Web Service需要进行测试和部署,JDeveloper给我们提供了很方便的测试 和部署环境,在JDeveloper中进行配置之后就可以进行测试和部署了。另外部署到服务 器之后还可以在服务器上对Java Web Service进行测试。 3.1. Java Web Service的测试 前面两中创建 Java Web Service 的方法已经介绍结束,那么如何验证他们是否正确呢? JDeveloper 11g 给我们提供了这个比较方便的工具可以用来测试我们的 Web Service。 在JDeveloper中测试Web Service的时候需要配置运行时的DefaultServer,如果使用默认的Domain, 那么在第一次测试 Web Service 的时候,JDeveloper 会自动给你创建一个 Domain,这个 Domain 的 配置可以用来运行 Web Service。 Tools-preferences-run-edit server instances 这个是 JDeveloper 安装后自带的一个 Domain。当然我们肯定希望将做好的 Web Service 配置在自 己的 Domain 的 Server 中进行测试和部署,那么我们就需要新建 Domain,并进行相关配置,详细 配置如下: 新建 Domain 的过程前面的环境配置中有介绍,这里需要提醒一点,创建 Domain 在选择域源时候, 记得勾选Oracle JRF – 11.1.1.0,另外创建完Web Service运行时Domain后,得修改domain_home/bin 下面的 setDomainEnv.cmd 文件的内容,以支持 Web Service 的运行。为什么要这么做,在本章的 第六部分:Web Service 开发过程中碰到的问题及解决方法中有介绍。 配置完 Domain 之后,把 JDeveloper 的 DefaultServer 修改成自己的 Domain 和 Server: 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service测试与部署 23 of 35 这样在测试 Web Service 的时候就会启动我们自己的 Domain 的 Server。并在我们自己的 Domain 的 Server 中测试 Web Service。 下面我们分别把前面的做的两个 Web Service 在自己的 Domain 中测试。 启动 DefaultServer: 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service测试与部署 24 of 35 以上信息说明 DefaultServer 已经启动。 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service测试与部署 25 of 35 在 arg0 : string 后面的文本框内输入任意字符串,点击 Send Request,右边就会显示 Response 的信 息。 正常返回。 下面再测试 fromJAVAProject。 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service测试与部署 26 of 35 在 arg0 : string 后面的文本框内输入任意字符串,点击 Send Request,右边就会显示 Response 的信 息。 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service测试与部署 27 of 35 也能按照我们的 Web Service 的实现正常返回结果。 3.2. Java Web Service的部署 经过上面的测试之后,就可以将 Web Service 部署到 WebLogic 的服务器。 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service测试与部署 28 of 35 登录到 WebLogic Console:http://localhost:7001/console 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service测试与部署 29 of 35 点击?WSDL 可以查看该 Web Service 的 WSDL 文档。 点击测试客户端,可以在服务器上对该 Web Service 进行测试。 跟在 JDeveloper 中一样,这里我们也输入任意 string:进行测试,输入之后点击 welcome 按钮就 会显示该 Web Service 的返回结果: 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 Java Web Service测试与部署 30 of 35 到这里,我们的 Web Service 也部署到 WebLogic 服务器上,并能够正常的被调用。 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 JDeveloper 11g开发Java Web Service过程中碰到的问题及解决方法 31 of 35 4. JDeveloper 11g开发Java Web Service过程中碰到的问题及解决方法 1)、本部分内容适合于有Java编程基础、了解XML、XML Namespace、XML Schema的技术开发人员。 2)、创建Web Service运行时Domain的域源时候,记得勾选Oracle JRF – 11.1.1.0、运行Web Service需要该 域源中的相关Class的支持。 3)、创建完Web Service运行时Domain后,得修改domain_home/bin下面的setDomainEnv.cmd文件的内 容,以支持Web Service的运行。修改如下: 在:set JAVA_PROPERTIES=%JAVA_PROPERTIES% %EXTRA_JAVA_PROPERTIES%之前添加: set EXTRA_JAVA_PROPERTIES=-Djps.app.credential.overwrite.allowed=true %EXTRA_JAVA_PROPERTI ES% 不加上面这句,在JDeveloper中测试运行Web Service的时候会报如下错误: weblogic.management.DeploymentException: [J2EE:160149]Error while processing library references. Unresolved application library references, defined in weblogic-application.xml: [Extension-Name: adf.oracle.domain, Implementation-Version: 11.1.1.1.0, exact-match: false], [Extension-Name: oracle.jsp.next, exact-match: false]. 4)、在JDeveloper中测试运行Web Service的时候报如下错误: [Deployer:149164]The domain edit lock is owned by another session in exclusive mode - hence this deployment operation cannot proceed. 解决办法: 登录WebLogic Console,删掉部署的相关application,然后重新运行即可。 5)、在WebLogic中部署完Web Service之后,通过测试客户端测试,可能点开页面的时候会报错: 这里是由于IP地址192.168.56.1问题,将WSDL的url中的IP地址改成localhost即可。 点击测试,恢复到正常的页面。 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 JDeveloper 11g开发Java Web Service过程中碰到的问题及解决方法 32 of 35 错误!未找到引用源。 Web Service开发:Java Web Service File Ref: Web Service开发:Java Web Service.doc (v. 1 ) Company Confidential - For internal use only Doc Ref: 错误!未找到引用源。 September 10, 2009 未结与已结问题 33 of 35 5. 未结与已结问题 未结问题 序号 问题 解决方案 负责人 目标日期 实际日期 已结问题 序号 问题 解决方案 负责人 目标日期 实际日期
还剩34页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 15 金币 [ 分享pdf获得金币 ] 7 人已下载

下载pdf

pdf贡献者

linux_android

贡献于2011-11-30

下载需要 15 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf