0
votes

I have a need to have three different scheduled jobs for picking up and transferring files to an SFTP server. Using examples I was able to create a single working flow. However, when I replicate that flow and adjust the configuration, I get an error complaining about 2 connectors matching protocol file.

It asks me to specify these, however, I have specified which endpoint should be used for each flow.

Does anyone have any ideas about what I'm doing wrong, or what Mule is looking for?

Flow definitions:

<file:endpoint name="partsDataConnector" path="${partsDataOriginFilePath}" pollingFrequency="5000" doc:name="partsDataFile"/>

<flow name="partsDataTransfer">

    <quartz:inbound-endpoint jobName="partsDataTransfer"
                             repeatInterval="10000" responseTimeout="10000" doc:name="Quartz">

        <quartz:endpoint-polling-job>
            <quartz:job-endpoint ref="partsDataConnector"/>
        </quartz:endpoint-polling-job>
    </quartz:inbound-endpoint>
    <sftp:outbound-endpoint host="${destinationFileServerIp}" port="${destinationFileServerPort}"
                            path="${partsDataDestinationPath}" tempDir="${partsDataDestinationTempDir}"
                            user="${destinationFileServerUser}" password="${destinationFileServerPassword}"
                            outputPattern="#[header:originalFilename]" />
</flow>

<file:endpoint name="imageDataConnector" path="${imageDataOriginFilePath}" pollingFrequency="5000" doc:name="partsDataFile"/>

<flow name="imageDataTransfer">
    <quartz:inbound-endpoint jobName="imageDataTransfer"
                             repeatInterval="10000" responseTimeout="10000" doc:name="Quartz">

        <quartz:endpoint-polling-job>
            <quartz:job-endpoint ref="imageDataConnector"/>
        </quartz:endpoint-polling-job>
    </quartz:inbound-endpoint>
    <sftp:outbound-endpoint host="${destinationFileServerIp}" port="${destinationFileServerPort}"
                            path="${imageDataDestinationPath}" tempDir="${imageDataDestinationTempDir}"
                            user="${destinationFileServerUser}" password="${destinationFileServerPassword}"
                            outputPattern="#[header:originalFilename]" />
</flow>

<file:endpoint name="customerDataConnector" path="${customerDataOriginFilePath}" pollingFrequency="5000" doc:name="partsDataFile"/>

<flow name="customerDataTransfer">
    <quartz:inbound-endpoint jobName="customerDataTransfer"
                             repeatInterval="10000" responseTimeout="10000" doc:name="Quartz">

        <quartz:endpoint-polling-job>
            <quartz:job-endpoint ref="customerDataConnector" />
        </quartz:endpoint-polling-job>
    </quartz:inbound-endpoint>
    <sftp:outbound-endpoint host="${destinationFileServerIp}" port="${destinationFileServerPort}"
                            path="${customerDataDestinationPath}" tempDir="${customerDataDestinationTempDir}"
                            user="${destinationFileServerUser}" password="${destinationFileServerPassword}"
                            outputPattern="#[header:originalFilename]" />
</flow>

Stacktrace:

2014-04-09 06:46:44,924 INFO [org.quartz.core.JobRunShell] Job mule.quartz://customerDataTransfer threw a JobExecutionException: org.quartz.JobExecutionException: org.mule.transport.service.TransportFactoryException: There are at least 2 connectors matching protocol "file", so the connector to use must be specified on the endpoint using the 'connector' property/attribute. Connectors in your configuration that support "file" are: connector.file.mule.default, connector.file.mule.default.1, (java.lang.IllegalStateException) [See nested exception: org.mule.transport.service.TransportFactoryException: There are at least 2 connectors matching protocol "file", so the connector to use must be specified on the endpoint using the 'connector' property/attribute. Connectors in your configuration that support "file" are: connector.file.mule.default, connector.file.mule.default.1, (java.lang.IllegalStateException)] at org.mule.transport.quartz.jobs.EndpointPollingJob.doExecute(EndpointPollingJob.java:176) at org.mule.transport.quartz.jobs.AbstractJob.execute(AbstractJob.java:36) at org.quartz.core.JobRunShell.run(JobRunShell.java:202) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:534)


2
Did you define multiple file connectors in your configuration? Because the error shown above mentions that there are two file connectors.user1760178

2 Answers

0
votes

The error message is asking you to declare explicit file:connector components. Now you have just file:endpoint components.

0
votes

If you haven't defined a file connecotr. Try declaring one and add a connector-reference on each of the file endpoints.

<file:connector name="myFileConnector" ></file:connector>

Add the Connector reference on each of the file endpoints as below. Add the reference for all the three file endpoints.

<file:endpoint name="imageDataConnector"  connector-ref="myFileConnector" path="${imageDataOriginFilePath}" pollingFrequency="5000" doc:name="partsDataFile"/>

Hope this helps.