IGS_学习笔记07_IREP通过页面测试客户化Web Service调用(案例)

简介: 20150819 Created By BaoXinjian 一、摘要 在编写客户化的PL/SQL程序,并将其发布到Oracle Integration Repositroy中,进而发布为Web服务, 本文描述通过第三方的程序来调用过我们的Web服务,来验证客户化的Web服务是否能够被正...

20150819 Created By BaoXinjian

一、摘要


在编写客户化的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来进行测试

 

二、 准备测试Web服务


Step1. 当发布完Web服务之后,就有http://paleonode1.sh.paleotek.com:8002/webservices/SOAProvider/plsql/oraclebxj_emp_pkg/这样的Web服务WSDL地址生成

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

这个测试页面会根据Web服务的方法参数不同Body部分会发生变化,其它地方的结构都是一样的,在界面中根据方法的参数情况填入参数值,

需要注意的是需要勾上 WS-Security 后面的 Include In Header,然后输入登录Oracle EBS应用的用户的密码,

这个用户必须要通过发布客户化集成接口为Web Service, 并Create Grant权限给该Oracle Erp应用的用户

 

三、解决Message send failed: For input string: “”问题


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

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

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

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

http.proxyHost

http.proxyPort

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

3.  再次填写信息提交后会报出 wsse:FailedAuthentication 这样的错误信息:

这是由于提交的Soap消息中并没有包括Oracle Integration Repository要求的AOL安全认证,

即没有Oracle EBS系统要求的用户、职责、安全组和语言信息,也就是没有进行Oracle EBS的环境初始化,

而这个Web服务的测试页面并不是专门给IREP的服务使用的,所以并不带AOL权限认证的标记信息,所以要手工修改XML文件,添加上述信息

 

四,修改测试请求XML数据


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

可是我应该修改成什么样的XML信息才能将认证信息包括进去呢,这个就需要使用第三方工具SoapUI在分析WSDL的时候帮助自动生成。

1. 将原来的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/sqlap/SOAProvider/plsql/oraclebxj_emp_pkg/"> <soap:Header> <wsrm:Request xmlns:wsrm="http://www.oasis-open.org/committees/wsrm/schema/1.1/SOAP1.1"
xmlns:SOAP
="http://schemas/xmlsoap.org/soap/envelope/" SOAP:mustUnderstand="1"> <wsrm:MessageId groupId="20150820-015045-985.1@paleonode1.sh.paleotek.com"/> <wsrm:ExpiryTime>2015-08-20T01:50:55</wsrm:ExpiryTime> <wsrm:ReplyPattern> <wsrm:Value>Poll</wsrm:Value> </wsrm:ReplyPattern> <wsrm:AckRequested/> <wsrm:DuplicateElimination/> </wsrm:Request> <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>sysadmin</wsse:Username> <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">sysadmin</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/bxj/soaprovider/plsql/oraclebxj_emp_pkg/create_employee/"> <ns1:InputParameters> <ns1:P_EMPNO>1</ns1:P_EMPNO> <ns1:P_ENAME>2</ns1:P_ENAME> <ns1:P_JOB>3</ns1:P_JOB> <ns1:P_MGR>4</ns1:P_MGR> <ns1:P_HIREDATE/> <ns1:P_SAL>5</ns1:P_SAL> <ns1:P_COMM>6</ns1:P_COMM> <ns1:P_DEPTNO>7</ns1:P_DEPTNO> </ns1:InputParameters> </soap:Body> </soap:Envelope>

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

(1). xmlns:orac

安全认证的命名空间,如果你对XSD不熟悉,那xmlns:orac的值如何来确定呢?

最简单的就是看soap:Body xmlns:ns1 后面的值,只要这个值到PLSQL包名的级别,

如我的例子就是http://xmlns.oracle.com/apps/sqlap/SOAProvider/plsql/oraclebxj_emp_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

 

五、使用SOA Monitor来监控诊断问题


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

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

 Error Description  User not authorized to execute service. 
Error Details  oracle.apps.fnd.soa.util.SOAException: AuthorizationFailure: Error in authorization check. Responsibility Name and Responsibility Application Name are either invalid or not assigned to the user
    at oracle.apps.fnd.soa.provider.services.jca.JCAHandler.handleRequest(JCAHandler.java:110)
    at oracle.apps.fnd.soa.provider.SOAProvider.processMessage(SOAProvider.java:272)
    at oracle.j2ee.ws.server.provider.ProviderProcessor.doEndpointProcessing(ProviderProcessor.java:956)
    at oracle.j2ee.ws.server.WebServiceProcessor$1.run(WebServiceProcessor.java:358)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at oracle.j2ee.ws.server.WebServiceProcessor.invokeEndpointImplementation(WebServiceProcessor.java:355)
    at oracle.j2ee.ws.server.provider.ProviderProcessor.doRequestProcessing(ProviderProcessor.java:466)
    at oracle.j2ee.ws.server.WebServiceProcessor.processRequest(WebServiceProcessor.java:114)
    at oracle.j2ee.ws.server.WebServiceProcessor.doService(WebServiceProcessor.java:96)
    at oracle.j2ee.ws.server.WebServiceServlet.doPost(WebServiceServlet.java:194)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:713)
    at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370)
    at com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:871)
    at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:453)
    at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:313)
    at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:199)
    at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
    at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
    at java.lang.Thread.run(Thread.java:619)
oracle.apps.fnd.soa.util.SOAException: InvalidHeader: Responsibility Name and Responsibility Application Name are either invalid or not assigned to the user
    at oracle.apps.fnd.soa.provider.services.AuthorizationHandler.authorize(AuthorizationHandler.java:104)
    at oracle.apps.fnd.soa.provider.services.jca.JCAHandler.handleRequest(JCAHandler.java:98)
    at oracle.apps.fnd.soa.provider.SOAProvider.processMessage(SOAProvider.java:272)
    at oracle.j2ee.ws.server.provider.ProviderProcessor.doEndpointProcessing(ProviderProcessor.java:956)
    at oracle.j2ee.ws.server.WebServiceProcessor$1.run(WebServiceProcessor.java:358)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at oracle.j2ee.ws.server.WebServiceProcessor.invokeEndpointImplementation(WebServiceProcessor.java:355)
    at oracle.j2ee.ws.server.provider.ProviderProcessor.doRequestProcessing(ProviderProcessor.java:466)
    at oracle.j2ee.ws.server.WebServiceProcessor.processRequest(WebServiceProcessor.java:114)
    at oracle.j2ee.ws.server.WebServiceProcessor.doService(WebServiceProcessor.java:96)
    at oracle.j2ee.ws.server.WebServiceServlet.doPost(WebServiceServlet.java:194)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:713)
    at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370)
    at com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:871)
    at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:453)
    at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:313)
    at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:199)
    at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(Serve
 

 

六、 准备测试Web服务


1. 查看XML数据源, 修改正确的配置信息后,再次提交请求

2. 再次测试后得到如下的结果:这是由于我调用的是一个过程没有返回值,

test_custom_plsql_dept_ws_result

3. 到数据中查询确认一下是否有数据进去

select count(*) from bxj_soa_employees

4. 也可以通过SOA Monitor来查看Web服务运行的情况

soa_monitor_success

 

Thanks and Regards

参考:张礼军先生 - http://oracleseeker.com/2009/10/22/test_invoke_web_service_in_irep/

ERP技术讨论群: 288307890
技术交流,技术讨论,欢迎加入
Technology Blog Created By Oracle ERP - 鲍新建
相关文章
|
6月前
|
Java 数据库 网络架构
菜鸟之路Day36一一Web开发综合案例(部门管理)
本文详细记录了基于Spring Boot的Web开发综合案例——部门管理功能的实现过程。从环境搭建到功能开发,涵盖数据库表设计、Spring Boot项目创建、依赖引入、配置文件设置以及Mapper、Service、Controller的基础结构构建。文章重点讲解了查询、删除、新增和修改部门信息的业务逻辑实现,遵循RESTful规范设计接口,并通过统一响应结果类`Result`优化前后端交互体验。借助Spring的IoC容器管理与MyBatis的SQL映射,实现了高效的数据操作与业务处理,最终完成部门管理的全功能开发。
191 12
|
5月前
|
XML SQL 前端开发
菜鸟之路Day37一一Web开发综合案例(员工管理)
本文介绍了基于Web开发的员工管理综合案例,涵盖分页查询、条件分页查询、删除员工和新增员工四大功能模块。通过前后端交互,前端传递参数(如页码、每页记录数、查询条件等),后端使用MyBatis与PageHelper插件处理数据查询与操作。代码结构清晰,包括Controller层接收请求、Service层业务逻辑处理以及Mapper层数据访问,并结合XML动态SQL实现灵活的条件查询。此外,新增与删除功能分别通过POST与DELETE请求完成,确保系统功能完整且高效。
177 7
|
5月前
|
存储 前端开发 Java
菜鸟之路Day38一一Web开发综合案例(三)
本文介绍了Web开发中的文件上传与员工信息修改的综合案例,涵盖前端到后端的完整流程。重点讲解了阿里云OSS的集成,包括Bucket创建、密钥获取及SDK使用,并通过Spring Boot实现文件上传功能。同时,详细描述了员工信息查询与修改的操作逻辑,涉及Controller、Service和Mapper层代码实现。最后探讨了配置文件的优化,对比@Value与@ConfigurationProperties注解,展示了如何通过实体类批量注入配置参数,提升代码可维护性与灵活性。
147 1
|
7月前
|
JSON 人工智能 前端开发
用markdown语法制作一个好看的网址导航页面(markdown-web-nav)
这是一篇关于创建网址导航页面的工具分享文章。作者介绍了从手动编写HTML代码到开发可视化工具 *markdown-web-nav* 的历程,旨在简化网址管理与导航页面生成的过程。该工具支持新增、编辑和删除网址数据,通过导入/导出JSON文件、实时预览Markdown效果以及一键复制等功能,让用户轻松制作美观的网站导航页面。文章还提供了详细的操作步骤及常见问题解答,如还原数据、获取网站图标链接等,适合不同技术水平的用户使用。
350 28
|
7月前
|
移动开发 前端开发 JavaScript
H5 页面与 Web 页面的制作方法
H5页面制作利用HTML5、CSS3和JavaScript技术,结合H5编辑器或框架(如Adobe Dreamweaver、Ionic),注重移动设备兼容性与响应式布局。Web页面制作则基于传统HTML、CSS和JavaScript,借助文本编辑器或IDE完成开发。两者区别在于技术版本、交互性和浏览器支持:H5更互动、现代,但可能不兼容旧浏览器;Web页面更静态、兼容性广。根据需求选择:高交互选H5,广泛兼容选Web。
975 6
|
6月前
|
Web App开发 前端开发 JavaScript
鸿蒙5开发宝藏案例分享---Web适配一多开发实践
这是一份实用的鸿蒙Web多设备适配开发指南,针对开发者在不同屏幕尺寸下的布局难题提供了解决方案。文章通过三大法宝(相对单位、媒体查询和窗口监听)详细介绍如何实现智能适配,并提供了多个实战案例,如宫格布局、对话框变形和自适应轮播图等。此外,还分享了调试技巧及工具推荐,帮助开发者快速上手并优化性能。最后鼓励读者实践探索,并提示更多官方资源等待发现。
|
9月前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
461 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
9月前
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
256 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
|
10月前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
307 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
测试技术
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
本文介绍了如何使用Pytest和Allure生成自动化测试报告。通过安装allure-pytest和配置环境,可以生成包含用例描述、步骤、等级等详细信息的美观报告。文章还提供了代码示例和运行指南,以及重构项目时的注意事项。
1055 1
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目