加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

通过webservice调用ODI方案的实现方式

发布时间:2020-12-17 01:17:12 所属栏目:安全 来源:网络整理
导读:项目上需要发布ODI的webservice,供给siebel调用,使得siebel可手动触发ODI方案运行,达到实时传递数据的目的。 ? 为实现该功能,做了以下尝试: ? 1)Tomcat5.x+Apache Axis2_1.2+odi-public-ws.aar发布webservice ? ??? 前提:需要安装Tomcat5.x版本,JDK5

项目上需要发布ODI的webservice,供给siebel调用,使得siebel可手动触发ODI方案运行,达到实时传递数据的目的。

?

为实现该功能,做了以下尝试:

?

1)Tomcat5.x+Apache Axis2_1.2+odi-public-ws.aar发布webservice

?

??? 前提:需要安装Tomcat5.x版本,JDK5.x版本,6.x以上版本会出现报错

??????????? Axis2需要1.2版本

???

?? Axis2部署到Tomcat后,登录Axis2应用http://xxx.xx.xx.xxx:7011/axis2,将odi-public-ws.aar上传,成功后可在Axis2的services里看到OdiInvoke的服务

?? 外界可通过http://xxx.xx.xx.xxx:7011/OdiInvoke?wsdl中的invokeScenario方法触发方案运行,详细步骤不在此表述。

?

?? 结论:wsdl正确发布,且所需参数都正确提供后,该方案可达到目的,可实现所需功能。

?

?????????? 因客户方偏好问题,不赞成使用Tomcat作为发布容器,因此产生第二种尝试

?

2)WebLogic+Apache Axis2_1.2.war+odi-public-ws.aar发布webservice

?

?????前提:安装weblogic11g, Axis2需要1.2版本

???? Axis2的版本务必是1.2的,否则部署到weblogic时不成功。

???? Axis2安装成功后,登录http://xxx.xx.xx.xxx:7011/axis2,通过上传按钮,将odi-public-ws.aar上传到服务器,然后到AXIS2的services查看,发现没有OdiInvoke服务。

???? 网上查找资料,找到解决方法如下:

?????在将Axis2.war文件上传之前,做如下操作

???? 1> 将odi-public-ws.aar添加到axis2.warWEB-INF/services/目录下,同时,修改该目录下的services.list文件,文件内容如下:

????????? version.aar

???????????odi-public-ws.aar

???? 2>将axis2.war发布到weblogic,发布成功后,可看到OdiInvoke服务,说明部署成功

???? 点击OdiInvoke服务进入页面,页面前面部分的xml内容显示正常,但在后面却报错:

?

The XML page cannot be displayed

Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button,or try again later.


--------------------------------------------------------------------------------

The operation completed successfully. Error processing resource 'http://172.19.1.32:7101/axis2/services/OdiInvoke?wsdl'. L...

</xs:schema></wsdl:types><wsdl:message name="listContextMessage"><wsdl:part name="part1" element="ns17:...
AN> type="xs:anyType" />
? <xs:element name="outFaultFlow" nillable="true" type="xs:anyType" />
? <xs:element name="outFaultPhases" nillable="true" type="xs:anyType" />?
?

? 多方查找资料,未果。怀疑是weblogic的xml解析器问题造成的,本打算把weblogic的解析器替换掉,但担心引起其他潜在问题,此方案被否决,因此做第三个方案尝试。

?

?? 3)odi-sdk-invocation.jar+java Class+webservice+weblogic

?

????? 上述尝试失败后,决定将odi-public-ws.aar解压,将方案调用的Java Api:odi-sdk-invocation.jar取出来在java直接进行调用,java里面的调用测试代码如下:

? ??? public static void main(String[] args){
????????
??????? OdiCommandScenario ODIcmdScenario = new OdiCommandScenario();
??????? ODIcmdScenario.setScenName("SNOWWOLF.ERP_SIEBEL_LOAD_DISTRIBUTOR_RS_DATA_CDC");
??????? ODIcmdScenario.setScenVersion("001");
??????? ODIcmdScenario.setContext("Global");
??????? ODIcmdScenario.setLogLevel(5);
??????? ODIcmdScenario.addVariable("SNOWWOLF.SIEBEL_IMPORT_STATUS","未导入");//PROJECT NAME.VAR NAME
??????? //set synchronous mode
??????? ODIcmdScenario.setSyncMode(OdiCommandScenario.SYNC_MODE_SYNCHRONOUS);
??????? //set connection details
??????? OdiRepositoryConnection ODIConnection = new OdiRepositoryConnection();
??????? ODIConnection.setJdbcDriver("oracle.jdbc.driver.OracleDriver");
??????? ODIConnection.setJdbcUrl("jdbc:oracle:thin:@xxx.xx.x.xxx:1521:orcl");
??????? ODIConnection.setJdbcUser("SOAM");
??????? ODIConnection.setJdbcPassword("TMP");

??????? ODIConnection.setOdiUser("ADMIN");
??????? ODIConnection.setOdiPassword("TMP");
??????? ODIConnection.setWorkRepositoryCode("SOAWDEV");


??????? try
??????? {
??????? OdiInvocation ODIInvocation = new OdiInvocation("xxx.xx.x.xxx",20913);//port:must be scheduler agent port
??????? OdiInvocationResult ODIresult = ODIInvocation.invokeCommand(ODIcmdScenario,ODIConnection);
??????? int status ;

??????? if (ODIresult.isOk())
??????? {
??????? status = 1;
??? //??? logger.debug("Session " + ODIresult.getSessionNumber());
??????? }
??????? else
??????? {
??????? status = 0;
???? //?? logger.debug("Error in connecting to repository " + ODIresult.getErrorMessage());
??????? }
??????? ODIInvocation.close();
??????? }
??????? catch (Exception e)
??????? {
??????????? e.printStackTrace();
??? //??? logger.debug("Exception " + io);
??????? }
??? }
测试前,务必确保所用的scheduler agent是启动的,在JDeveloper运行该代码,测试成功。

后面可考虑将该代码发布成webservice的形式,如此即可结合weblogic一起使用。

?使用JDeveloper发布webservice的过程,后期有时间会做详细的测试

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读