1

我正在使用 Mule ESB CE 3.4。我有一个要求,我从数据库中读取配置信息并将其用作文件出站端点的文件名。这是一个示例代码(代码可能不起作用,因为我只给出了一个大纲)

<file:connector name="File-Data" autoDelete="false" streaming="true" validateConnections="true" doc:name="File" />
.....
<!-- Gets the configuration from database using a transformer. The transformer populates the configuration entries in a POJO and puts that in a session.  -->
<custom-transformer  class="com.test.DbGetConfigsTransformer" doc:name="Get Integration Configs"/>
....<!-- some code to process data -->
<logger message="$$$: #[sessionVars['currentFeed'].getFilePattern()]" doc:name="Set JSON File Name" /> -->
<file:outbound-endpoint path="/temp" outputPattern="#[sessionVars['currentFeed'].getFilePattern()]" responseTimeout="10000" mimeType="text/plain" connector-ref="File-Data" doc:name="Save File"/>

上面的代码抛出以下错误:

1. The filename, directory name, or volume label syntax is incorrect (java.io.IOException)
  java.io.WinNTFileSystem:-2 (null)
2. Unable to create a canonical file for /temp/Test_User_#[function:datestamp:YYYYMMddhhmmss.sss] (org.mule.api.MuleRuntimeException)
  org.mule.util.FileUtils:354 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MuleRuntimeException.html)
3. Failed to route event via endpoint: DefaultOutboundEndpoint{endpointUri=file:///temp, connector=FileConnector

在数据库表中,字段名称称为 FilePattern,其值为 'Test_User_#[function:dateamp:YYYYMMddhhmmss.sss]。如果我硬编码该值或将此值移动到 mule 配置文件

file.name=Test_User_#[function:datestamp:YYYYMMddhhmmss.sss]

并使用配置属性语法(例如'outputpattern'中的${file.name}),它可以工作。但是,如果我从 db 中读取相同的内容并使用它,它就无法正常工作并引发错误。记录器显示为(从数据库中读取)

$$$: Test_#[function:datestamp:YYYYMMddhhmmss.sss]    

任何帮助深表感谢。

4

1 回答 1

2

如果您的日期戳格式没有变化,您应该只将环境前缀存储在您的数据库中并使用以下内容:

outputPattern="#[sessionVars['prefix']+server.dateTime.format('YYYYMMddhhmmss.sss')]"

如果您需要使用您当前的数据库值,您可以使用基本的 Java 字符串方法来查找正确的子字符串。例如:

#[sessionVars['currentFeed'].getFilePattern().substring(0,sessionVars['currentFeed'].getFilePattern().indexOf('function')-2)+server.dateTime.format('YYYYMMddhhmmss.sss')]

如果您使用不同的日期戳格式,您也可以使用类似的字符串方法找到该部分。但是,我仍然建议您想出一个仅将环境前缀存储在 db 中的实现。

于 2014-03-18T12:12:50.783 回答