使用Bpel调用IREP中发布的Web Service
十二月 30, 2009 in Oracle EBS二次开发
Oracle EBS R12中提供了将系统接口和客户化接口发布成Web Service的功能,下面将尝试使用Oralce SOA Suite 11g中的Bpel对其进行调用。
一、开发以及测试环境
EBS R12.1.1
Weblogic 10.3.1
Oracle SOA Suite 11.1.1.2
Jdeveloper 11.1.1.2.0
二、前提设置
本文描述如何建立一个调用IREP中WEB SERVICE的BPEL流程。在开始之前,必须对一些环境进行安装和设置。涉及到的内容有:
1. 为EBS R12做最基本的设置(设置到OU)
2. 按照本站中的文章《使用Integration Repositoy Parser(IREP)的前提设置》,对R12中的IREP进行设置。
3. 按照本站中的文章《发布客户化PLSQL API到Oracle Integration Repositoy(IREP)》,发布测试用的客户化API到IREP中,以供Bpel调用。
三、搭建以IREP中的Web Service为PartnerLink的BPEL流程
在前提设置做好之后,IREP中已经发布成Web Servcie的API就和一般的Web Service没有什么区别了。不过要注意的是,因为访问IREP中的WebService需要进行安全验证。所以相应的,BPEL中调用时也应该加入安全验证信息。
1,创建PartnerLink以及BPEL流程
进入EBS的Integration Repository中,“前提设置”第3步事先设定好的接口,找到已经发布好的客户化API的WSDL地址。
接着在Jdeveloper的Bpel设计器中,添加一个PartnerLink,WSDL的位置填入上面复制下来的WSDL地址。这里用的是把上面的WSDL文件导入本地BPEL工程后直接调用的方式,如图:
引入的WSDL代码片段如下:
<binding name=”STANLEY_EMP_PKG_Binding” type=”tns:STANLEY_EMP_PKG_PortType”>
<soap:binding style=”document” transport=”http://schemas.xmlsoap.org/soap/http”/>
<operation name=”CREATE_EMPLOYEE”>
<soap:operation soapAction=”http://erpprod.oracle.com:8000/webservices/SOAProvider/plsql/stanley_emp_pkg/”/>
<input>
<soap:header message=”tns:CREATE_EMPLOYEE_Input_Msg” part=”header” use=”literal”/>
<soap:body use=”literal” parts=”body”/>
</input>
</operation>
</binding>
可以看到,该WEB SERVICE需要传进去的参数有头和消息体,header中就是SOAHeader标签的内容了,包括Responsibility,RespApplication,SecurityGroup,NLSLanguage,Org_Id。这个和手工调用IREP中API需要输入的内容是一致的。这里使用一个Assign节点给header赋值。如图:
然后使用一个Transform节点,把BPEL流程的输入参数传到Body中,完成后整个BPEL流程如图:
这个时候就已经可以把BPEL发布到Weblogic中了,但是运行的时候会报错:SEVERE: An error occurred for port: FabricProvider: javax.xml.rpc.soap.SOAPFaultException: Missing <wsse:Security> in SOAP Header.原因很明显,我们在调用WebService的时候,没有提供必要的WS-Security验证信息。下面我们去设置这个验证信息的值。
2,提供WS-Security验证信息
打开Bpel工程中的composite.xml文件:
点击PartnerLink节点,在Property Inspector窗口中可以看到该节点的属性信息。添加一条Policies。在新增界面的Security中,添加oracle/wss_username_token_client_policy,并保证在CheckBox中已经勾选上:
OK后,再回到Property Inspector窗口,添加Binding Properties。分别增加oracle.webservices.auth.username和oracle.webservices.auth.password两条记录,值为在IREP相应的API中授权的EBS用户的账户和密码。这里为SYSADMIN用户。 设置好之后,Property Inspector窗口如图:
做完以上设置之后,BPEL流程就可以发布到weblogic上进行测试了。
顺利调用IREP客户化API成功:

相关文章:
aronezhang said on 十二月 30, 2009
感谢Stanley.liu将IREP和BPEL串联起来,期待更多关于BPEL的精彩文章。