2009年7月15日星期三

SOASuite_015:Oracle SOA Suite 10g 问与答

Q1:如何直接从别人传的string类型的xml文件中提取我想要的节点?<?xml version="1.0" encoding="GBK"?>
<root>
<data>
<rtInfo>
<SYSTEMNAME>IPNET</SYSTEMNAME>
<CREATEDPT/>
<NETCELLTYPENAME>SDH </NETCELLTYPENAME>
<FAULTDISCOVERDATE pattern="yyyy-MM-dd HH:mm:ss">2008-02-19 13:52:07</FAULTDISCOVERDATE>
<FAULTTYPENAME>SDH设备故障 </FAULTTYPENAME>
</rtInfo>
<rtValue>
<rtCode>1</rtCode>
<rtMessage>dfdfd<rtMessage>
</rtValue>
</data>
</root>

比方说我想提取<rtInfo>这个节点及该节点下面的值,应该如何操作呢?上面的是一个string类型的xml。 有没有比较好的方法呢,可以不用每次都写一个schema文件,可以直接从别人传的string类型的xml文件中提取我想要的节点(因为我知道string类型的xml中有哪些节点)?(因为我们跟很多系统都有很多接口,而且每个接口的字段可能都有很多40个字段左右,所以不想写schema文件)


答:用Schema规范接口中的参数是一种很好的方式,这样就可以方便地使用XPath,XQuery来操作XML数据。如果觉得写Schema文件太麻烦,有一些XML工具可以从XML文件生成Schema文件:如XML SPY,XML Explorer。

Q2:有没有一个可以查看web service的详细的日志文件,可以查看对方系统调用我们传的参数及我们返回给对方系统的数据,这样方便查看及定位问题,如果没有这样的日志的话,应该怎么用BPEL构件来打印日志呢?

答:SOA Suite 使用log4j来实现日志功能,从低到高分为,Off ->Fatal->Error ->Warn->Info->Debug->All,要查看详细日志,使用最高日志级别All。
不过,要想查看具体的SOAP消息,需要使用其它的工具。详见《
观察BPEL Process 交互的SOAP消息

Q3:如何动态调用外部写好的webservice?动态调用的过程中定义的endpoint变量是否需要初始化?除了address之外,是否必须要有servername才行?

答:需要定义并初始化EndpointReference类型的变量。只需要定义servername就可以,具体的address可以定义WSDL文件中(通过定义多个services)。BPEL Server会根据servername找到对应的address地址。

Q4:BPEL流程对于输入的字符串参数的内容是否有限制?如是否有保留的特殊字符等。

答:BPEL流程中使用的是XML Schmea定义的数据。String是Schema中的简单类型,对该类型的数据内容没有特别的限制,只要接受方能够处理这样的字符串。

Q5:压力测试时,发生BPEL 流程示例“丢失”的情况,但 HumanTask 实例却没有丢失。

Q6:异步调用迟迟不返回,能否通过BPEL Console给一个返回值,让流程结束?

Q7:能否用ESB Database Adapter,在Insert 操作时触发2个BPEL流程实例?

1 条评论:

匿名 说...

关于BPEL动态调用的问题:我现在已有一些数据提供的webservice,并将这些其wsdl的地址存放到了数据库中,在编排BPEL流程的时候,如何根据查询出来的那些wsdl地址来调用对应的webservice服务来获取数据。