[转帖]IREP: 测试Integration Repository客户化Web服务的调用_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2682 | 回复: 0   主题: [转帖]IREP: 测试Integration Repository客户化Web服务的调用        下一篇 
晶晶
注册用户
等级:少校
经验:1086
发帖:89
精华:0
注册:2012-11-8
状态:离线
发送短消息息给晶晶 加好友    发送短消息息给晶晶 发消息
发表于: IP:您无权察看 2015-3-24 11:49:39 | [全部帖] [楼主帖] 楼主

IREP: 测试Integration Repository客户化Web服务的调用

本文描述通过第三方的程序来调用过我们的Web服务,来验证客户化的Web服务是否能够被正常调用,在Oracle Integrate SOA Gataway的开发手册中介绍了如何在BPEL流程中调用客户化的Web服务,而搭建一个BPEL的运行环境对于开发人员来说需要耗费比较多的时间,而且需要对BPEL的开发比较熟悉,否则无法顺利的进行;另外很多时候开发Web服务的目的也并不仅仅是为了给BPEL流程调用,因此大动干戈去设计一个BPEL流程来测试我们客户化的Web服务显然不现实,本文就介绍如何采用简单的方法来进行Web服务的测试。

1.使用Oracle EBS服务器中OC4J自带的Web服务测试页面进行测试

2.采用第三方软件,如soapUI来进行测试  

一、OC4J的Web服务测试页面

1,准备测试Web服务

当发布完Web服务之后,就有http://ebs006.hand-china.com:8001/webservices/SOAProvider/plsql/oracleseeker_dept_pkg/?WSDL这样的Web服务WSDL地址生成

北京联动北方科技有限公司

这个地址是中间应用服务器中Web服务描述的地址,只要去掉这个地址中最后的?WSDL之后在浏览器中打开就可以看到如下的界面

北京联动北方科技有限公司

上面的这个Web服务中的ADD_DEPARTMENT方法的功能是用来向DEPT表中添加一个新的部门

这个测试页面会根据Web服务的方法参数不同Body部分会发生变化,其它地方的结构都是一样的,在界面中根据方法的参数情况填入参数值,需要注意的是需要勾上 WS-Security 后面的 Include In Header,然后输入登录Oracle EBS应用的用户的秘密,这个用户必须要通过 Oracle Integration Repositoy(IREP)中发布客户化集成接口为Web Service 一文中介绍的授权设置

北京联动北方科技有限公司

2,解决Message send failed: For input string: “”问题

上面的信息输入完成后,点击 Invoke 按钮来进行测试,报出如下的错误:

javax.xml.soap.SOAPException: java.security.PrivilegedActionException: javax.xml.soap.SOAPException: Message send failed: For input string: “”


这个错误是由于OC4J的JVM中启用了代理服务的配置,只要将其去掉就可以:

将$ORA_CONFIG_HOME/10.1.3/j2ee/oafm/config/oc4j.properties 文件中

1.http.proxyHost

2.http.proxyPort

这两行注释掉,然后重启服务就可以了。

再次填写信息提交后会报出 wsse:FailedAuthentication 这样的错误信息,这是由于提交的Soap消息中并没有包括Oracle Integration Repository要求的AOL安全认证,即没有Oracle EBS系统要求的用户、职责、安全组和语言信息,也就是没有进行Oracle EBS的环境初始化,而这个Web服务的测试页面并不是专门给IREP的服务使用的,所以并不带AOL权限认证的标记信息。

3,修改测试请求XML数据

这时候怎么办呢?

通过修改提交的SOAP的XML信息,让XML信息中包括这些认证信息,点击上图中 XML源 这个选项按钮切换到XML模式。

可是我应该修改成什么样的XML信息才能将认证信息包括进去呢,这个就需要使用第三方工具在分析WSDL的时候帮助自动生成(这个工作就留到后面soapUI中来解决)?

将原来的XML修改为如下的内容:

<soap:Envelope xmlns:soap=”http://schemas.xmlsoap.org/soap/envelope/”
xmlns:wsu=”http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd”
xmlns:orac=”http://xmlns.oracle.com/apps/xhu/soaprovider/plsql/oracleseeker_dept_pkg/” >
<soap:Header>
<wsse:Security xmlns:wsse=”http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd”
xmlns=”http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd”
xmlns:env=”http://schemas.xmlsoap.org/soap/envelope/”
soap:mustUnderstand=”1″>
<wsse:UsernameToken xmlns:wsse=”http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd”
xmlns=”http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd”>
<wsse:Username>234</wsse:Username>
<wsse:Password Type=”http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText”>11111</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
<orac:SOAHeader>
<!–Optional:–>
<orac:Responsibility>APPLICATION_DEVELOPER</orac:Responsibility>
<!–Optional:–>
<orac:RespApplication>FND</orac:RespApplication>
<!–Optional:–>
<orac:SecurityGroup>STANDARD</orac:SecurityGroup>
<!–Optional:–>
<orac:NLSLanguage>AMERICAN</orac:NLSLanguage>
<!–Optional:–>
<orac:Org_Id>204</orac:Org_Id>
</orac:SOAHeader>
</soap:Header>
<soap:Body xmlns:ns1=”http://xmlns.oracle.com/apps/xhu/soaprovider/plsql/oracleseeker_dept_pkg/add_department/”>
<ns1:InputParameters>
<ns1:P_DEPTNO>60</ns1:P_DEPTNO>
<ns1:P_DNAME>oracleseeker</ns1:P_DNAME>
<ns1:P_LOC>aronezhang</ns1:P_LOC>
</ns1:InputParameters>
</soap:Body>
</soap:Envelope>


其中黑体标出的部分就是需要自己添加,关键的几个标签:

1.xmlns:orac 安全认证的命名空间,如果你对XSD不熟悉,那xmlns:orac的值如何来确定呢? 最简单的就是看soap:Body xmlns:ns1 后面的值,只要这个值到PLSQL包名的级别,如我的例子就是”http://xmlns.oracle.com/apps/xhu/soaprovider/plsql/oracleseeker_dept_pkg/”

2.SOAHeader 其中的子标签的结构永远都是这样的,只是里面的值需要根据情况进行改变,这个标签下的内容和我们使用 fnd_global 包来初始化应用环境的道理是一样的

3.Responsibility 代表上面提供的用户名下用哪个职责来调用Web服务,我想对于Oracle EBS二次开发人员对这个应该会比较有感觉,有可能不同的职责的设置或预置文件都不一样,对应的是职责的key

4.RespApplication 是职责所对应的应用简称,如FND

5.SecurityGroup 职责对应的安全组,一般情况下都是STANDARD

6.NLSLanguage 需要的语言环境,如AMERICAN

7.Org_Id 职责对应的默认OU值,如204 

按照上面的XML内容修改后,点击 Invoke 按钮提交Web服务调用,可是不巧又报出如下的错误信息,到数据库中去查询也没有插入任何数据:

北京联动北方科技有限公司

这样的错误信息对我们并没有太多的帮助,它并没有打印出Java错误的堆栈信息,怎么办呢?继续往下看……

3,使用SOA Monitor来监控诊断问题

上面调用了Web服务但是返回了错误信息,这时候就需要借助SOA Monitor工具来查看详细的错误信息,进而分析问题的所在,通过 Integrated SOA Gateway –> SOA Monitor 进入页面并查找出Web服务调用的历史记录

北京联动北方科技有限公司

然后点击Response列中的眼睛图标进入查看Web服务调用的回应消息,打开后可以看到整个错误的堆栈信息,这里摘取主要的一段:

oracle.apps.fnd.soa.util.SOAException: ServiceProcessingError: Exception returned from JCA Service Runtime.
file:/d02/inst/apps/VIS02_ebs006/soa/PLSQL/4690/ADD_DEPARTMENT.wsdl [ ADD_DEPARTMENT_ptt::ADD_DEPARTMENT(InputParameters) ] –
WSIF JCA Execute of operation ‘ADD_DEPARTMENT’ failed due to: Could not instantiate InteractionSpec oracle.tip.adapter.apps.AppsStoredProcedureInteractionSpec due to: Error while setting JCA WSDL Property.
Property setIRepOverloadSeq is not defined for oracle.tip.adapter.apps.AppsStoredProcedureInteractionSpec
Please verify the spelling of the property.
; nested exception is:
ORABPEL-12532
Error while setting JCA WSDL Property.


可以看到Web服务方法的WSDL文件/d02/inst/apps/VIS02_ebs006/soa/PLSQL/4690/ADD_DEPARTMENT.wsdl中存在问题,查看这个文件的内容

<jca:operation
PackageName=”ORACLESEEKER_DEPT_PKG”
ProcedureName=”ADD_DEPARTMENT”
IRepInternalName=”PLSQL:ORACLESEEKER_DEPT_PKG:ADD_DEPARTMENT”
IRepOverloadSeq=”1″
InteractionSpec=”oracle.tip.adapter.apps.AppsStoredProcedureInteractionSpec” >
</jca:operation>


这个标签中包含了一个属性IRepOverloadSeq,看上面的错误应该是Oracle在Java中没有实现对这个属性的处理,看样子是一个bug,既然程序中没有处理它,那不管怎么说先备份这个文件后将这个属性删除测试看看。

再次测试后得到如下的结果:

北京联动北方科技有限公司

这是由于我调用的是一个过程没有返回值,到数据中查询确认一下是否有数据进去:

View Code PLSQL

1
2
3
4
5
6
7
8
9
10
11

;;;

select * from dept;

DEPTNO DNAME LOC
------ -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
60 oracleseeker aronezhang

5 rows selected

;;;



60的部门已经成功存入数据表中,恭喜一下,我们的测试顺利完成!也可以通过SOA Monitor来查看Web服务运行的情况

北京联动北方科技有限公司

二、第三方软件soapUI测试

使用soapUI工具主要是它会根据WSDL的描述来自动帮助生成OC4J提供的Web服务测试页面无法生成的AOL验证标签,所以测试工作就变得比上面的方法简单,另外soapUI提供免费版本软件使用,所以soapUI基本成为Web服务开发人员的必备工具,因此一并也介绍一下如何使用它来进行Web服务的测试

1,从官方网站http://www.soapui.org 下载免费软件soapUI后解压,然后点击bin\soapui.bat来打开soapUI

2,选择File菜单中的New soapUI Project来创建一个新的项目,在Initial WSDL/WADL中输入服务的WSDL地址:http://ebs006.hand-china.com:8001/webservices/SOAProvider/plsql/oracleseeker_dept_pkg/?WSDL

北京联动北方科技有限公司

3,创建完成后,soapUI会根据WSDL生成方法,然后在方法下面双击Request 1 ,右边窗口就可以看到调用Web服务时所需要发送的soap XML数据

北京联动北方科技有限公司
在左下角的Request Properites中录入Oracle EBS登录用户信息:

Username:<用户名>

Password:<密码>

WSS-Password Type:PasswordText

这里生成的XML就包括了AOL验证的信息了,因此配合这个工具我们就知道OC4J中的XML数据需要添加什么标签,用户安全性认证设置了上面3个属性后会自动添加.

4,在soap 请求的XML数据中输入EBS初始化相关的几个参数值,同时填入调用方法的参数值后,点击右边窗口上工具栏的小箭头按钮 Submit request to specified endpoint URL提交调用,调用的结果会在最右边的窗口显示 

上面描述了利用OC4J的Web服务测试页面以及第三方Web服务调用工具soapUI配合来完成了Oracle Integration Repository中客户化服务的测试工作,后续将讲解如何开发其它类型的集成接口。

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论