OracleWebservice接口开发.doc

上传人:一*** 文档编号:809342 上传时间:2019-07-16 格式:DOC 页数:23 大小:249.50KB
返回 下载 相关 举报
OracleWebservice接口开发.doc_第1页
第1页 / 共23页
OracleWebservice接口开发.doc_第2页
第2页 / 共23页
点击查看更多>>
资源描述

《OracleWebservice接口开发.doc》由会员分享,可在线阅读,更多相关《OracleWebservice接口开发.doc(23页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、Oracle EBS接口开发之通过 DBWS 包实现WEBSERVICEAuthor:苏南生E-Mail:nansheng.su#hand-Creation Date:December 27, 2014Last Updated:December 27, 2014Document Ref: Version:DRAFT 1AApprovals:Copy Number_Document ControlChange Record3DateAuthorVersionChange Reference2014-12-27snansDraft 1aNo Previous DocumentReviewersNa

2、mePositionDistributionCopy No.NameLocation1Library MasterProject Library 2Project Manager 3 4Note 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 th

3、is document, please write your name on the front cover, for document control purposes.ContentsDocument Control.ii1.Webservice.21.1 一个案例.2 1.2 模拟测试.3 1.3 什么是WebService.3 1.4 WebService平台技术.42.DBWS包.62.1 DBWS.6 2.2 下载安装.63.XML .103.1 为什么要说XML.10 3.2 命名空间的引入.10 3.3 命名空间的声明与使用.114.XPath.134.1 Xpath简介.13

4、 4.2 XPath路径表达式.135.Oracle 解析带有命名空间的XML.185.1 XMLTABLE.18 5.2 extract.186.信保通对接代码示例 .197.Open and Closed Issues for this Deliverable.20Open Issues.20 Closed Issues.201. Webservice1.1 一个案例一个案例1)案例功能:通过输入IP地址地址查询国家、城市、所有者等信息。2)返回数据: 一个一维字符串数组String(1),String(0) = IP地址;String(1) = 查询结果或提示信息3)案例地 址:http

5、:/ ce.asmx?op=getCountryCityByIp4)WSDL地 址:http:/ ce.asmx?wsdl请求数据格式:POST /WebServices/IpAddressSearchWebService.asmx HTTP/1.1 Host: Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: “http:/WebX 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: lengthstringstring1.2

6、 模拟测试模拟测试1)软件模拟:通过SOAP协议,发送请求2)软件模拟:接收返回的数据由于软件的编码缺陷,这边第二个标签内容为:”中国 移动”3) 附件:案例软件包wfetch.rar通过以上的软件模拟,我们已经大概知道了Webservice的大概交互方式和作用。1.3 什么是什么是WebService其实可以从多个角度来理解WebService,从表面上看,WebService就是一个应用程序向外界暴露出一个能通过Web进行调用的API,也就是说能用编程的方法通过Web来调用这个应用程序。我们把调用这个WebService的应用程序叫做客户端,而把提供这个WebService的应用程序叫做服

7、务端。从深层次看,WebService是建立可互操作的分布式应用程序的新平台,是一个平台,是一套标准。它定义了应用程序如何在Web上实现互操作性,你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问。 WebService平台需要一套协议来实现分布式应用程序的创建。任何平台都有它的数据表示方法和类型系统。要实现互操作性,WebService平台必须提供一套标准的类型系统,用于沟通不同平台、编程语言和组件模型中的不同类型系统。Web service平台必须提供一种标准来描述Web service,让客户可以得

8、到足够的信息来调用这个Web service。最后,我们还必须有一种方法来对这个Web service进行远程调用,这种方法实际是一种远程过程调用协议(RPC)。为了达到互操作性,这种RPC协议还必须与平台和编程语言无关。1.4 WebService平台技术平台技术XML+XSD,SOAP和WSDL就是构成WebService平台的三大技术。XML+XSD:WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的返回结果是什么)。XML是WebService平台中表示数据的格式。 XML解决了数据表示的问题

9、,但它没有定义一套标准的数据类型,更没有说怎么去扩展这套数据类型。例如,整形数到底代表什么?16位,32位,64位?这些细节对实现互操作性很重要。XML Schema(XSD)就是专门解决这个问题的一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。WebService平台就是用XSD来作为其数据类型系统的。当你用某种语言(如VB.NET或C#)来构造一个Web service时,为了符合WebService标准,所有你使用的数据类型都必须被转换为XSD类型。你用的工具可能已经自动帮你完成了这个转换,但你很可能会根据你的需要修改一下转换过程。SOAP:WebService

10、通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC方法来调用Web Service。SOAP协议 = HTTP协议 + XML数据格式SOAP协议定义了SOAP消息的格式,SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。打个比喻:HTTP就是普通公路,XML就是中间的绿色隔离带和两边的防护栏,SOAP就是普通公路经过加隔离带和防护栏改造过的高速公路。WSDL:好比

11、我们去商店买东西,首先要知道商店里有什么东西可买,然后再来购买,商家的做法就是张贴广告海报。 WebService也一样,WebService客户端要调用一个WebService服务,首先要有知道这个服务的地址在哪,以及这个服务里有什么方法可以调用,所以,WebService务器端首先要通过一个WSDL文件来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法,方法接受的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用。WSDL(Web Services Description Language)就是这样一个基于XML的语言,用于描述Web Se

12、rvice及其函数、参数和返回值。它是WebService客户端和服务器端都能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的Web service生成WSDL文档,又能导入WSDL文档,生成调用相应WebService的代理类代码。WSDL文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。2. DBWS包包2.1 DBWSOracle在9i时代就发布了扩展包来支持PL/SQL访问Web Services,并且在Orac

13、le 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 exist2.检查数据库中java classes 的状态-2.检查数据库中java classes 的状态 SELECT owner, status, count(*) FROM DBA_OBJECTS

14、 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-ca

15、llout-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 dbws

16、clientdb102.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 # 1

17、1g 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 ASl_service UTL_DBWS.service;l_call UTL_DBWS.call;l_wsdl

18、_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; BEGINl_wsdl_url := http:/oracle- := http:/wwworacl323ces/;-l_service_qname := UTL_DBWS.to_

19、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.c

20、reate_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);UTL_DBWS.release_call (call_handle = l_call);UTL_DBWS.release_servi

21、ce (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代表安装成功。报错则失败。3. XML3.1 为什么要说为什么要说XML本次总结Webservice是在开发信保通接口时学习和总结的内容。信保通使用Webservice进行数据交互。当我们安装完DBWS包以后,我们就可以使用DBWS的API和信保通通信。但是XML数据返回的

22、内容包含命名空间,对我们的Oracle解析XML造成影响。所以总结下XML的命名空间。-返回XML的部分样例:对账单查询 2014-12- 22T15:36:28+08:00 1 1589919对账单查询 2014-12- 22T09:39:16+08:00 1 15896883.2 命名空间的引入命名空间的引入比如有两份 XML 数据Unmi Unmi Gaoxin Nanyi Road, NanShan District, Shenzhen 集成在一起时就是Unmi Gaoxin Nanyi Road, NanShan District, Shenzhen 注意到上面,此时计算机是基本

23、无法分辨是何种 address。当然,你说分别换成 和 不行了吗?但这要修改 DTD 文件,也许你没权利修改这些个 DTD 文件,即使行的话,同样再来个别的 address 是不又要修改 DTD 文件?由此就引入了命名空间 (Namespace) 分别来区分以上那两个 address,甚至更多的 address。有了命名空间,你不必改写 DTD,命名空间一般会用一个 URI 来标定唯一性。加入命名空间后完成 XML 文件如下:Unmi Gaoxin Nanyi Road, NanShan District, Shenzhen 3.3 命名空间的声明与使用命名空间的声明与使用前面那个 XML

24、可读性是增强了,但如果我们用浏览器打开上面的XML,会报找不到命名空间的错误:所以我们要声明命名空间,有两种声明方式 (1) 显式声明,(2) 默认式声明1)显式声明显式声明在用到命名空间 (缩写为 ns) 标记 (缩写为 tag) 的外层 (祖先,但通常写在根标记上) 标记中声明,语法如下:然后为 XML 文件中每个标记都加上命名空间(也就是前缀,以下前缀与命名空间等同),修正好的 XML 内容如下Unmi Gaoxin Nanyi Road, NanShan District, Shenzhen 我们为 XML 文档中出现的每一个标记都使用了前缀,IE 中再次打开,不会有问题了。这里要记

25、住命名空间命名空间的关键声明部分语法为 xmlns:ns=“URI“。2)默认式声明默认式声明是不是觉得上面那个写法太烦琐了,的确。所以就有了默认声明方式,让不带前缀的标签从属于默认命名空间“。声明语法如下与显式声明的语法只第一行有差异,把两种形式的第一行拿出来就是 Unmi Gaoxin Nanyi Road, NanShan District, Shenzhen 还有,即使是用了显式声明命名空间语法,如果其中仍有未带前缀的标签存在,其实那个标签也是在一个默认的命名空间中,只是没有明确告诉你一个默认的 URI,也许这时默认的 URI 是 “。如下:Unmi Gaoxin Nanyi Ro

26、ad, NanShan District, Shenzhen 既不在 earth 中,也不在 net 中,它其实也是在默认的命名空间命名空间中,是 “关于 xmlns 那个 URI 说明一点,它只是被借用来唯一标识的名称,看似网址网址,你可以在那个网页里随意写些东西,或许根本不可到达。4. XPath4.1 Xpath简介简介XPath是W3C的一个标准。它最主要的目的是为了在XML1.0或XML1.1文档节点树中定位节点所设计。目前有XPath1.0和 XPath2.0两个版本。其中Xpath1.0是1999年成为W3C标准,而XPath2.0标准的确立是在2007年。W3C关于XPath的

27、英文 详细文档请见: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中使用XPa

28、th表达式定位节点的知识在后面的实例中会有所介绍。 在学习XPath之前你应该对XML的节点,元素,属性,原子值(文本),处理指令,注释,根节点(文档节点),命名空间以及对节点间的关系如:父 (Parent),子(Children),兄弟(Sibling),先辈(Ancestor),后代(Descendant)等概念有所了解。这里不在说明.4.2 XPath路径表达式路径表达式1./AAA基本的XPath语法类似于在一个文件系统中定位文件,如果路径以斜线 / 开始, 那么该路径就表示到一个元素的绝对路径。2./AAA/CCC选择AAA的所有CCC子元素3./AAA/DDD/BBB选择AAA的子

29、元素DDD的所有子元素BBB4./BBB如果路径以双斜线 / 开头,则表示选择文档中所有满足双斜线/之后规则的元 素(无论层级关系)。5./DDD/BBB选择所有父元素是DDD的BBB元素6./AAA/CCC/DDD/*星号 * 表示选择所有由星号之前的路径所定位的元素选择所有路径依附于/AAA/CCC/DDD的元素7./*/*/*/BBB选择所有的有3个祖先元素的BBB元素8./*选择所有元素9./AAA/BBB1方块号里的表达式可以进一步的指定元素,其中数字表示元素在选择集里的位 置,而last()函数则表示选择集中的最后一个元素。10. /id选择所有的有id 属性的元素11. /BBB

30、id=b15. Oracle 解析带有命名空间的解析带有命名空间的XML5.1 XMLTABLEXML脚本:test1test2test3XML解析:SELECT xmlt.*FROM test_xmltype,xmltable(xmlnamespaces(http:/ 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 extractSE

31、LECT t.xml.extract(/a/ns1:b/text(),xmlns:ns1=“http:/ al() from test_xmltype t; 6. 信保通对接代码示例信保通对接代码示例DECLAREl_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.qnam

32、e;l_xmltype_in sys.xmltype;l_xmltype_out sys.xmltype;l_return VARCHAR2(1000); BEGINl_wsdl_url := http:/192.168.0.103:8888/ediDemoforjava/ws_services/SolEdiBaseInfoWebService?wsdl;l_namespace := http:/;l_service_qname := utl_dbws.to_qname(l_namespace, SolEdiBaseInfoWebService);-l_port_qname := UTL_DB

33、WS.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_na

34、me = l_port_qname,operation_name = l_operation_qname);l_xmltype_in := sys.xmltype( | 1 | );l_xmltype_out := utl_dbws.invoke(call_handle = l_call, request = l_xmltype_in);utl_dbws.release_call(call_handle = l_call);utl_dbws.release_service(service_handle = l_service);INSERT INTO test_snans(CLOB)VALUE

35、S(l_xmltype_out.getclobval();/*l_return := l_xmltype_out.extract(/ns1:doEdiAccountListResponse/ns1:out/ns2:Account/calltime/text().getStringVal();dbms_output.put_line(l_return); */ END;7. Open and Closed Issues for this DeliverableAdd open issues that you identify while writing or reviewing this doc

36、ument to the open issues section. As you resolve issues, move them to the closed issues section and keep the issue ID the same. Include an explanation of the resolution.When this deliverable is complete, any open issues should be transferred to the project- or process-level Risk and Issue Log (PJM.C

37、R.040) and managed using a project level Risk and Issue Form (PJM.CR.040). In addition, the open items should remain in the open issues section of this deliverable, but flagged in the resolution column as being transferred.Open IssuesIDIssueResolutionResponsibilityTarget DateImpact DateClosed IssuesIDIssueResolutionResponsibilityTarget DateImpact Date

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com