通过Oracle File Adapter和FTP Adapter实现文件复制功能,保持文件名不变(10g 10.1.3.X)...

Go to My Oracle Blog

此文中的操作对File Adapter和FTP Adapter均适用,为了方便我只用File Adapter举例。
File Adapter是Oracle提供的诸多技术Adapter之一,可以轻而易举得实现对文件的读写操作,在SOA应用中发挥着整合传统应用系统的作用。

[@more@]

昨天在一次不经意的谈话中得知,有一个很简单的需求,看上去通过File Adapter实现应该没有任何难度,却困扰着客户3年有余:用File Adapter在特定目录下读取文件,把读取的文件写入另一个目录,文件名保持不变。
就是这个"文件名保持不变"的配置,在JDeveloper的File Adapter创建向导里不见其踪影。在配置File Adapter的写文件功能时,向导要求输入目标文件名,此时如果想要引用读入文件的文件名则无从下手。
解决方法是利用BPEL流程和File Header Message。

这个BPEL流程原理是:

1)创建两个File Adapter Partner Link,分别是:读取文件的Inbound Adapter和写文件的Outbound Adapter。两个Adapter的Message Schema都设置为Native Format。在配置Outbound adapter时,文件名先设置成任意值,它将不会有任何作用,文件名会在运行时决定(源文件名)。
2)创建一个Receive activity接受Inbound adapter的消息。
3)创建一个Invoke activity向Outbound adapter发出消息。
4)创建一个Assign activity,在这个Assign activity里添加两个Copy activity,目的分别是:
i. (Copy activity 1)把Receive activity的输入变量赋予Invoke activity的输出变量。
ii.(Copy activity 2)把源文件的文件名赋予目标文件的文件名。

其中,
Receive activity的代码需要添加以下属性(其他自动添加属性略):
@bpelx:headerVariable="ReadFileHeader"
//这个变量很关键,它接住了Inbound adapter发出的File Header Message,这个Message里包含源文件名。
//变量声明:
//命名空间:xmlns:ns2="http://xmlns.oracle.com/pcbpel/adapter/file/"
xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
@createInstance="yes"
//如果Inbound adapter读到文件则创建BPEL实例。
Invoke activity的代码需要添加以下属性(其他自动添加属性略):
@bpelx:inputHeaderVariable="WriteFileHeader"
//这个变量决定了Outbound adapter创建文件的文件名。
然后通过Assign activity把变量ReadFileHeader里的文件名赋予变量WriteFileHeader里的文件名就完成主要任务了:
Assign activity里Copy activity 2的代码:

query="/ns2:InboundFileHeaderType/ns2:fileName"/>
query="/ns2:OutboundFileHeaderType/ns2:fileName"/>

当然别忘了Copy activity 1,做文件复制操作:

query="/ns4:opaqueElement"/>
query="/ns4:opaqueElement"/>

//命名空间:xmlns:ns4="http://xmlns.oracle.com/pcbpel/adapter/opaque/"

*Note: File/FTP Adapter的操作有文件大小为7M的限制。

Todd

Go to My Oracle Blog

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22966231/viewspace-1029819/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22966231/viewspace-1029819/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值