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

转自:http://oracleseeker.com/2009/10/22/test_invoke_web_service_in_irep/

前面的文章已经讲解了如何编写客户化的PL/SQL程序,并将其发布到Oracle Integration Repositroy中,进而发布为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地址生成

oracleseeker_dept_webservice_wsdl

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

test_custom_plsql_dept_ws_endpoint

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

 

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

test_custom_plsql_dept_ws_values

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服务调用,可是不巧又报出如下的错误信息,到数据库中去查询也没有插入任何数据:

test_custom_plsql_web_service_error

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

 

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

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

soa_monitor_error

然后点击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,既然程序中没有处理它,那不管怎么说先备份这个文件后将这个属性删除测试看看。

 

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

test_custom_plsql_dept_ws_result

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

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服务运行的情况

soa_monitor_success

 

二、第三方软件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

create_soapUI_project

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

soapUI_test_with_user_pwd_result

在左下角的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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值