2015-03-03 2 views
0

Вот мой мул приложение XML конфигурацииНевозможно опубликовать файл HTTP конечной точки внутри выбора в мул

<mule xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" 
xmlns:spring="http://www.springframework.org/schema/beans" 
xmlns:quartz="http://www.mulesoft.org/schema/mule/quartz" 
xmlns:http="http://www.mulesoft.org/schema/mule/http" 
xmlns:vm="http://www.mulesoft.org/schema/mule/vm" 
xmlns:test="http://www.mulesoft.org/schema/mule/test" 
xmlns:file="http://www.mulesoft.org/schema/mule/file"  
xsi:schemaLocation="http://www.mulesoft.org/schema/mule/quartz http://www.mulesoft.org/schema/mule/quartz/current/mule-quartz.xsd 
http://www.mulesoft.org/schema/mule/test http://www.mulesoft.org/schema/mule/test/3.6/mule-test.xsd 
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/3.6/mule.xsd 
http://www.mulesoft.org/schema/mule/vm http://www.mulesoft.org/schema/mule/vm/3.6/mule-vm.xsd 
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/3.6/mule-http.xsd 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/3.6/mule-file.xsd"> 

<object-to-string-transformer name="httptoobj" /> 
<file:connector name="input"/> 
<http:http-response-to-object-transformer 
    name="httptostring" /> 
<configuration> 
    <expression-language autoResolveVariables="false"> 
     <import class="com.xyz.alertcampaign.appworkflow.CampaignStatus" /> 
    </expression-language> 
</configuration> 
<flow name="polling" doc:name="polling" processingStrategy="synchronous"> 
    <quartz:inbound-endpoint repeatInterval="3000" 
     startDelay="3000" jobName="couchbasePoller" doc:name="Quartz"> 
     <quartz:event-generator-job stateful="true" /> 
    </quartz:inbound-endpoint> 
    <component doc:name="Java"> 
     <singleton-object 
      class="com.xyz.alertcampaign.appworkflow.CouchbasePoller" /> 
    </component> 

    <vm:outbound-endpoint exchange-pattern="one-way" 
     path="oozieQueue" doc:name="Trigger workflow" /> 

</flow> 
<flow name="oozie-workflow-manager" doc:name="oozie-workflow-manager"> 
    <vm:inbound-endpoint exchange-pattern="one-way" 
     path="oozieQueue" doc:name="VM" /> 

    <foreach collection="#[payload.items()]" counterVariableName="counter"> 
     <choice doc:name="Choice"> 
      <when expression="#[payload.status == CampaignStatus.NOT_STARTED]"> 
       <file:inbound-endpoint address="file://#[payload.fileName]" connector-ref="input"/>    
       <http:outbound-endpoint exchange-pattern="request-response" 
        address="http://localhost:8080/oozie/v1/jobs" 
        responseTransformer-refs="httptoobj" method="POST" doc:name="HTTP" 
        contentType="application/xml;charset=UTF-8" /> 
       <choice doc:name="Choice"> 
        <when expression="#[message.inboundProperties['http.status'] == 201]"> 
         <component doc:name="Java"> 
          <singleton-object 
           class="com.xyz.alertcampaign.appworkflow.JobUpdater" /> 
         </component> 
        </when> 
        <otherwise> 
         <logger level="ERROR" message="Error occurred on creating Job in OOzie " /> 
        </otherwise> 
       </choice> 
      </when> 
      <when 
       expression="#[payload.status == CampaignStatus.UPDATED || payload.status == CampaignStatus.EXPIRED]"> 
       <logger level="ERROR" message="#[payload.status]" /> 
       <http:outbound-endpoint exchange-pattern="request-response" 
        method="PUT" 
        address="http://localhost:8080/oozie/v1/job/#[payload.jobId]?action=kill" 
        responseTransformer-refs="httptoobj" doc:name="HTTP" /> 
       <choice doc:name="Choice"> 
        <when expression="#[message.inboundProperties['http.status'] == 200]"> 
         <component doc:name="Java"> 
          <singleton-object 
           class="com.xyz.alertcampaign.appworkflow.JobUpdater" /> 
         </component> 
        </when> 
        <otherwise> 
         <logger level="ERROR" message="Error occurred on killing Job in OOzie " /> 
        </otherwise> 
       </choice> 
      </when> 
     </choice> 
    </foreach> 
</flow> 

</mule> 

Получение следующих исключений (стек):

Исключение при загрузке мул»XML: Вызванный по: org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Неверный контент был найден, начиная с файла element: inbound-endpoint. Один из '{"http://www.mulesoft.org/schema/mule/core": abstract-message-processor, "http://www.mulesoft.org/schema/mule/core": abstract-outbound-endpoint, "http://www.mulesoft.org/schema/mule/core": abstract-mixed-content-message-processor}'.

Почему мне не разрешено размещать файл на http внутри маршрутизатора выбора?

ответ

1

Вы можете использовать только file:inbound-endpoint в начале потока. Если вы пытаетесь получить средний поток файлов, рассмотрите возможность использования модуля Mule Requestor. Это позволяет запрашивать ресурс (т. Е. Файл) в любой точке потока.

0

Проблема в том, что это входящая конечная точка, поэтому вы добавляете источник сообщения в середине потока. То, что вы должны сделать, это определить другой поток, который начинается с этой конечной точки входящего файла (со всей этой логикой) и использовать элемент ссылки потока в выборе для него. Для получения дополнительной информации посетите doc.

+0

Я пробовал это сейчас. Но я получаю следующую ошибку. org.muleule.launcher.DeploymentInitException: MalformedEndpointException: Конечная точка "file: // # [payload.fileName]" неверна и не может быть проанализирована. Если это имя глобальной конечной точки, проверьте правильность имени, что существует конечная точка, и что вы используете правильную конфигурацию (например, атрибут «ref»). Обратите внимание, что имена для входящих и исходящих конечных точек не могут использоваться для отправки или получения сообщений; используйте вместо этого глобальную конечную точку. Только конечные точки исходящих сообщений могут быть динамическими. –

+0

Да, это имеет смысл. Я не понимал, где вы используете полезную нагрузку, чтобы динамически получить имя файла. – afelisatti

0

Дополнительная информация Я думаю, что есть еще одна проблема, когда входящая конечная точка не позволяет динамические входы. Я решил это через MuleRequester

+0

Если это так, вы можете согласиться с ответом, чтобы вопрос был разрешен. Благодарю. – danw

+0

Почему mule-реквестер удаляет файл после чтения данных. Как мне избежать этого? –

+0

Вам необходимо настроить соединитель файла, в котором для свойства 'autoDelete' установлено значение 'false'. Вы можете использовать этого запроса, настроив ресурс как файл ресурса: // путь/в/файл? FileConnector ". Если у вас все еще есть вопросы, задайте новый вопрос, и ответы могут быть опубликованы там. – danw

Смежные вопросы