Oracle-Webservice接口开发_第1页
Oracle-Webservice接口开发_第2页
Oracle-Webservice接口开发_第3页
Oracle-Webservice接口开发_第4页
Oracle-Webservice接口开发_第5页
免费预览已结束,剩余17页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Oracle EBS接口开发之 通过 DBWS 包实现WEBSERVICE Author 苏南生 E Mail nansheng su hand Creation Date December 27 2014 Last Updated December 27 2014 Document Ref Version DRAFT 1A Approvals Copy Number Oracle ompany Confidential For internal use only Doc Ref December 27 2014Error Reference source not found Document Control 2 Document Control Change Record 3 DateAuthorVersionChange Reference 2014 12 27snansDraft 1aNo Previous Document Reviewers NamePosition Distribution Copy No NameLocation 1Library MasterProject Library 2Project Manager 3 4 Note To Holders If you receive an electronic copy of this document and print it out please write your name on the equivalent of the cover page for document control purposes If you receive a hard copy of this document please write your name on the front cover for document control purposes Oracle ompany Confidential For internal use only Doc Ref December 27 2014Error Reference source not found Document Control 3 Contents Document Control ii 1 Webservice 2 1 1 一个案例 2 1 2 模拟测试 3 1 3 什么是WebService 3 1 4 WebService平台技术 4 2 DBWS包 6 2 1 DBWS 6 2 2 下载安装 6 3 XML 10 3 1 为什么要说XML 10 3 2 命名空间的引入 10 3 3 命名空间的声明与使用 11 4 XPath 13 4 1 Xpath简介 13 4 2 XPath路径表达式 13 5 Oracle 解析带有命名空间的XML 18 5 1 XMLTABLE 18 5 2 extract 18 6 信保通对接代码示例 19 7 Open and Closed Issues for this Deliverable 20 Open Issues 20 Closed Issues 20 Oracle ompany Confidential For internal use only Doc Ref December 27 2014Error Reference source not found Webservice 2 1 Webservice 1 1 一个案例一个案例 1 案例功能 通过输入IP地址地址查询国家 城市 所有者等信息 2 返回数据 一个一维字符串数组String 1 String 0 IP地址 String 1 查询结果或提示信息 3 案例地 址 ce asmx op getCountryCityByIp 4 WSDL地 址 ce asmx wsdl 请求数据格式 POST WebServices IpAddressSearchWebService asmx HTTP 1 1 Host Content Type text xml charset utf 8 Content Length length SOAPAction http WebX string 返回数据格式 HTTP 1 1 200 OK Content Type text xml charset utf 8 Content Length length string string Oracle ompany Confidential For internal use only Doc Ref December 27 2014Error Reference source not found Webservice 3 1 2 模拟测试模拟测试 1 软件模拟 通过SOAP协议 发送请求 2 软件模拟 接收返回的数据 由于软件的编码缺陷 这边第二个标签内容为 中国 移动 3 附件 案例软件包 wfetch rar 通过以上的软件模拟 我们已经大概知道了Webservice的大概交互方式和作用 1 3 什么是什么是WebService 其实可以从多个角度来理解WebService 从表面上看 WebService就是一个应用 程序向外界暴露出一个能通过Web进行调用的API 也就是说能用编程的方法通过Web 来调用这个应用程序 我们把调用这个WebService的应用程序叫做客户端 而把提供 这个WebService的应用程序叫做服务端 从深层次看 WebService是建立可互操作的 分布式应用程序的新平台 是一个平台 是一套标准 它定义了应用程序如何在Web 上实现互操作性 你可以用任何你喜欢的语言 在任何你喜欢的平台上写Web service 只要我们可以通过Web service标准对这些服务进行查询和访问 Oracle ompany Confidential For internal use only Doc Ref December 27 2014Error Reference source not found Webservice 4 WebService平台需要一套协议来实现分布式应用程序的创建 任何平台都有它的数 据表示方法和类型系统 要实现互操作性 WebService平台必须提供一套标准的类型 系统 用于沟通不同平台 编程语言和组件模型中的不同类型系统 Web service平台 必须提供一种标准来描述Web service 让客户可以得到足够的信息来调用这个Web service 最后 我们还必须有一种方法来对这个Web service进行远程调用 这种方法实 际是一种远程过程调用协议 RPC 为了达到互操作性 这种RPC协议还必须与平台和 编程语言无关 1 4 WebService平台技术平台技术 XML XSD SOAP和WSDL就是构成WebService平台的三大技术 XML XSD WebService采用HTTP协议传输数据 采用XML格式封装数据 即XML中说明调用 远程服务对象的哪个方法 传递的参数是什么 以及服务对象的返回结果是什 么 XML是WebService平台中表示数据的格式 XML解决了数据表示的问题 但它没有定义一套标准的数据类型 更没有说怎么去扩 展这套数据类型 例如 整形数到底代表什么 16位 32位 64位 这些细节对实现 互操作性很重要 XML Schema XSD 就是专门解决这个问题的一套标准 它定义了一 套标准的数据类型 并给出了一种语言来扩展这套数据类型 WebService平台就是用 XSD来作为其数据类型系统的 当你用某种语言 如VB NET或C 来构造一个Web service时 为了符合WebService标准 所有你使用的数据类型都必须被转换为XSD类 型 你用的工具可能已经自动帮你完成了这个转换 但你很可能会根据你的需要修改 一下转换过程 SOAP WebService通过HTTP协议发送请求和接收结果时 发送的请求内容和结果内容都采 用XML格式封装 并增加了一些特定的HTTP消息头 以说明HTTP消息的内容格式 这些特定的HTTP消息头和XML内容格式就是SOAP协议 SOAP提供了标准的RPC方 法来调用Web Service SOAP协议 HTTP协议 XML数据格式 SOAP协议定义了SOAP消息的格式 SOAP协议是基于HTTP协议的 SOAP也是基 于XML和XSD的 XML是SOAP的数据编码方式 打个比喻 HTTP就是普通公 Oracle ompany Confidential For internal use only Doc Ref December 27 2014Error Reference source not found Webservice 5 路 XML就是中间的绿色隔离带和两边的防护栏 SOAP就是普通公路经过加隔离带 和防护栏改造过的高速公路 WSDL 好比我们去商店买东西 首先要知道商店里有什么东西可买 然后再来购买 商家的 做法就是张贴广告海报 WebService也一样 WebService客户端要调用一个 WebService服务 首先要有知道这个服务的地址在哪 以及这个服务里有什么方法可 以调用 所以 WebService务器端首先要通过一个WSDL文件来说明自己家里有啥服 务可以对外调用 服务是什么 服务中有哪些方法 方法接受的参数是什么 返回值 是什么 服务的网络地址用哪个url地址表示 服务通过什么方式来调用 WSDL Web Services Description Language 就是这样一个基于XML的语言 用于描 述Web Service及其函数 参数和返回值 它是WebService客户端和服务器端都能理解 的标准格式 因为是基于XML的 所以WSDL既是机器可阅读的 又是人可阅读的 这将是一个很大的好处 一些最新的开发工具既能根据你的Web service生成WSDL文 档 又能导入WSDL文档 生成调用相应WebService的代理类代码 WSDL文件保存在Web服务器上 通过一个url地址就可以访问到它 客户端要调用一 个WebService服务之前 要知道该服务的WSDL文件的地址 Oracle ompany Confidential For internal use only Doc Ref December 27 2014Error Reference source not found DBWS包 6 2 DBWS包包 2 1 DBWS Oracle在9i时代就发布了扩展包来支持PL SQL访问Web Services 并且在Oracle 10g版本中使得该功能变得更加强大 这都源于引入了UTL DBWS包 其实它是封装 了JPublisher 使得PL SQL开发者只需要使用简单的几个API就能调用Web Services 了 2 2 下载安装下载安装 1 检查是否已经安装utl dbws包 SQL desc sys utl dbws ERROR ORA 04043 object sys utl dbws does not exist 2 检查数据库中java classes 的状态 2 检查数据库中java classes 的状态 SELECT owner status count FROM DBA OBJECTS WHERE OBJECT TYPE JAVA CLASS GROUP BY owner status OWNER STATUS COUNT APPS VALID 4576 MDSYS VALID 564 SYS VALID 24722 ODM VALID 264 ORDSYS VALID 1876 如果存在INVALID状态的失效类 可以运行 ORACLE HOME rdbms admin utlrp sql 来修复 3 下载最新的dbwsclient jar文件 Pre 10g dbws callout utility zip 10 1 2 10g dbws callout utility 10R2 zip 10 1 3 0 10g 11g System altered SQL alter system set JAVA POOL SIZE 200M scope both System altered 7 安装 安装到 SYS schema export PATH ORACLE HOME bin PATH cd ORACLE HOME sqlj lib 10gR2 loadjava u sys password r v f genmissing s grant public dbwsclientws jar dbwsclientdb102 jar 11g and 12c loadjava u sys password r v f genmissing s grant public dbwsclientws jar dbwsclientdb11 jar 安装到非 SYS schema export PATH ORACLE HOME bin PATH cd ORACLE HOME sqlj lib 10gR2 loadjava u scott tiger r v f genmissing dbwsclientws jar dbwsclientdb102 jar 11g SQL GRANT EXECUTE ON sys utl dbws TO apps 9 测试脚本 如果已经安装完成以上步骤 我们可以通过如下实例来检验我们的Oracle是否已 经成功安装DBWS包 新建一个FUNCTION 作用是 接收两个数值 然后程序调用Webservice 计算 两个number的和 CREATE OR REPLACE FUNCTION add numbers p int 1 IN NUMBER p int 2 IN NUMBER RETURN NUMBER AS l service UTL DBWS service l call UTL DBWS call l wsdl url VARCHAR2 32767 l namespace VARCHAR2 32767 l service qname UTL DBWS qname l port qname UTL DBWS qname l operation qname UTL DBWS qname l xmltype in SYS XMLTYPE l xmltype out SYS XMLTYPE l return NUMBER BEGIN l wsdl url http oracle l namespace http wwworacl323ces l service qname UTL DBWS to qname l namespace Calculator l port qname UTL DBWS to qname l namespace CalculatorPort l operation qname UTL DBWS to qname l namespace ws add l service UTL DBWS create service wsdl document location URIFACTORY getURI l wsdl url service name l service qname l call UTL DBWS create call service handle l service port name l port qname operation name l operation qname l xmltype in SYS XMLTYPE p int 1 p int 2 l xmltype out UTL DBWS invoke call Handle l call request l xmltype in Oracle ompany Confidential For internal use only Doc Ref December 27 2014Error Reference source not found DBWS包 9 UTL DBWS release call call handle l call UTL DBWS release service service handle l service l return l xmltype out extract return text getNumberVal RETURN l return END 运行如下SQL SELECT add numbers 1 5 from dual 输出 6代表安装成功 报错则失败 Oracle ompany Confidential For internal use only Doc Ref December 27 2014Error Reference source not found XML 10 3 XML 3 1 为什么要说为什么要说XML 本次总结Webservice是在开发信保通接口时学习和总结的内容 信保通使用 Webservice进行数据交互 当我们安装完DBWS包以后 我们就可以使用DBWS的API 和信保通通信 但是XML数据返回的内容包含命名空间 对我们的Oracle解析XML造 成影响 所以总结下XML的命名空间 返回XML的部分样例 对账单查询 2014 12 22T15 36 28 08 00 1 1589919 对账单查询 2014 12 22T09 39 16 08 00 1 1589688 3 2 命名空间的引入命名空间的引入 比如有两份 XML 数据 Unmi fantasia Unmi Gaoxin Nanyi Road NanShan District Shenzhen 集成在一起时就是 Unmi fantasia Gaoxin Nanyi Road NanShan District Shenzhen Oracle ompany Confidential For internal use only Doc Ref December 27 2014Error Reference source not found XML 11 注意到上面 此时计算机是基本无法分辨是何种 address 当然 你说分别换成 和 不行了吗 但这要修改 DTD 文件 也许你没权 利修改这些个 DTD 文件 即使行的话 同样再来个别的 address 是不又要修改 DTD 文件 由此就引入了命名空间 Namespace 分别来区分以上那两个 address 甚至更多 的 address 有了命名空间 你不必改写 DTD 命名空间一般会用一个 URI 来标定唯 一性 加入命名空间后完成 XML 文件如下 Unmi fantasia Gaoxin Nanyi Road NanShan District Shenzhen 3 3 命名空间的声明与使用命名空间的声明与使用 前面那个 XML 可读性是增强了 但如果我们用浏览器打开上面的XML 会报找不到 命名空间的错误 所以我们要声明命名空间 有两种声明方式 1 显式声明 2 默认式声明 1 显式声明显式声明 在用到命名空间 缩写为 ns 标记 缩写为 tag 的外层 祖先 但通常写在根标记 上 标记中声明 语法如下 然后为 XML 文件中每个标记都加上命名空间 也就是前缀 以下前缀与命名空间 等同 修正好的 XML 内容如下 Oracle ompany Confidential For internal use only Doc Ref December 27 2014Error Reference source not found XML 12 Unmi fantasia Gaoxin Nanyi Road NanShan District Shenzhen 我们为 XML 文档中出现的每一个标记都使用了前缀 IE 中再次打开 不会有问 题了 这里要记住命名空间命名空间的关键声明部分语法为 xmlns ns URI 2 默认式声明默认式声明 是不是觉得上面那个写法太烦琐了 的确 所以就有了默认声明方式 让不带前 缀的标签从属于默认命名空间 声明语法如下 与显式声明的语法只第一行有差异 把两种形式的第一行拿出来就是 tag xmlns URI 和 ns1 tag1 xmlns ns1 URI1 标签本身不带前缀了 并且是直 接的 xmlns 等于一个 URI 默认命名空间的 URI 表明这个标签本身就在默认命 名空间中 以及子孙标签若未带前缀也是在默认命名空间中的 这样改造过的 XML 文件内容就是 Unmi fantasia Gaoxin Nanyi Road NanShan District Shenzhen 还有 即使是用了显式声明命名空间语法 如果其中仍有未带前缀的标签存在 其实那个标签也是在一个默认的命名空间中 只是没有明确告诉你一个默认的 URI 也许这时默认的 URI 是 如下 Unmi fantasia Gaoxin Nanyi Road NanShan District Shenzhen 既不在 earth 中 也不在 net 中 它其实也是在默认的命名空间命名空间中 是 关于 xmlns 那个 URI 说明一点 它只是被借用来唯一标识的名称 看似网址网址 你 可以在那个网页里随意写些东西 或许根本不可到达 Oracle ompany Confidential For internal use only Doc Ref December 27 2014Error Reference source not found XPath 13 4 XPath 4 1 Xpath简介简介 XPath是W3C的一个标准 它最主要的目的是为了在XML1 0或XML1 1文档节点树 中定位节点所设计 目前有XPath1 0和 XPath2 0两个版本 其中Xpath1 0是1999年成 为W3C标准 而XPath2 0标准的确立是在2007年 W3C关于XPath的英文 详细文档请 见 http www w3 org TR xpath20 XPath是一种表达式语言 它的返回值可能是节点 节点集合 原子值 以及节点 和原子值的混合等 XPath2 0是XPath1 0的超集 它 是对XPath1 0的扩展 它可以支 持更加丰富的数据类型 并且XPath2 0保持了对XPath1 0的相对很好的向后兼容性 几乎所有的 XPath2 0的返回结果都可以和XPath1 0保持一样 另外XPath2 0也是 XSLT2 0和XQuery1 0的用于查询定位节点的主表达 式语言 XQuery1 0是对XPath2 0 的扩展 关于在XSLT和XQuery中使用XPath表达式定位节点的知识在后面的实例中会 有所介绍 在学习XPath之前你应该对XML的节点 元素 属性 原子值 文本 处理指 令 注释 根节点 文档节点 命名空间以及对节点间的关系如 父 Parent 子 Children 兄弟 Sibling 先辈 Ancestor 后代 Descendant 等概念 有所了解 这里不在说明 4 2 XPath路径表达式路径表达式 1 AAA 基本的XPath语法类似于在一个文件系统中定位文件 如果路径以斜线 开始 那么该路径就表示到一个元素的绝对路径 2 AAA CCC Oracle ompany Confidential For internal use only Doc Ref December 27 2014Error Reference source not found XPath 14 选择AAA的所有CCC子元素 3 AAA DDD BBB 选择AAA的子元素DDD的所有子元素BBB 4 BBB 如果路径以双斜线 开头 则表示选择文档中所有满足双斜线 之后规则的元 素 无论层级关系 5 DDD BBB 选择所有父元素是DDD的BBB元素 Oracle ompany Confidential For internal use only Doc Ref December 27 2014Error Reference source not found XPath 15 6 AAA CCC DDD 星号 表示选择所有由星号之前的路径所定位的元素 选择所有路径依附于 AAA CCC DDD的元素 7 BBB 选择所有的有3个祖先元素的BBB元素 Oracle ompany Confidential For internal use only Doc Ref December 27 2014Error Reference source not found XPath 16 8 选择所有元素 Oracle ompany Confidential For internal use only Doc Ref December 27 2014Error Reference source not found XPath 17 9 AAA BBB 1 方块号里的表达式可以进一步的指定元素 其中数字表示元素在选择集里的位 置 而last 函数则表示选择集中的最后一个元素 10 id 选择所有的有id 属性的元素 11 BBB id b1 Oracle ompany Confidential For internal use only Doc Ref December 27 2014Error Reference source not found Oracle 解析带有命名空间的XML 18 5 Oracle 解析带有命名空间的解析带有命名空间的XML 5 1 XMLTABLE XML脚本 test1 test2 test3 XML解析 SELECT xmlt FROM test xmltype xmltable xmlnamespaces AS ns1 root a passing test xmltype xml AS root columns b VARCHAR2 500 path ns1 b c VARCHAR2 500 path ns1 c d VARCHAR2 500 path ns1 d AS xmlt 5 2 extract SELECT t xml extract a ns1 b text xmlns ns1 val from test xmltype t Oracle ompany Confidential For internal use only Doc Ref December 27 2014Error Reference source not found 信保通对接代码示例 19 6 信保通对接代码示例信保通对接代码示例 DECLARE l service utl dbws service l call utl dbws call l wsdl url VARCHAR2 32767 l namespace VARCHAR2 32767 l service qname utl dbws qname l port qname utl dbws qname l operation qname utl dbws qname l xmltype in sys xmltype l xmltype out sys xmltype l return VARCHAR2 1000 BEGIN l wsdl url http 192 168 0 103 8888 ediDemoforjava ws services SolEdiBaseInfoWebService wsdl l namespace l service qname utl dbws to qname l namespace SolEdiBaseInfoWebService l port qname UTL DBWS to qname l namespace CalculatorPort l operation qname utl dbws to qname l namespace doEdiAccountList l service utl dbws create service wsdl document location urifactory geturi l wsdl url service name l service qname l call utl dbws create call service handle l service port name l port qna

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论