2013-09-05 3 views
1

Я новичок в Mule и испытываю трудности с использованием элементов элементов-перехватчиков.Проблемы с Mule ESB с пакетом-перехватчиком

Следующая кажется, что берется прямо из их документации здесь: http://www.mulesoft.org/documentation/display/33X/Using+Interceptors

<interceptor-stack name="default"> 
    <logging-interceptor/> 
    <timer-interceptor/> 
</interceptor-stack> 

<flow name="MyFlowFlow1" doc:name="MyFlowFlow1"> 

    <interceptor-stack ref="default"/> <!--this is line 15 --> 
    <logger level="INFO" message="Got here"/> 

</flow>  

, но я получаю исключение сказать, что это недопустимо.

Может ли кто-нибудь сказать мне, что я делаю неправильно?

org.xml.sax.SAXParseException; lineNumber: 15; columnNumber: 43; cvc-complex-type.2.4.a: Invalid content was found starting with element 'interceptor-stack'. One of '{"http://www.mulesoft.org/schema/mule/core":annotations, "http://www.mulesoft.org/schema/mule/core":description, "http://www.mulesoft.org/schema/mule/core":abstract-message-source, "http://www.mulesoft.org/schema/mule/core":abstract-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://www.mulesoft.org/schema/mule/core":response}' is expected. 
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source) 
...etc... 

EDIT - Здесь приведены ответы на вопросы ниже.

Этот первый частный поток отлично работает при вызове из другого потока через поток-ref. Я вижу сообщение «получил здесь» и время.

<flow name="test2Flow1" doc:name="test2Flow1"> 
    <timer-interceptor/> 
    <logger level="INFO" message="got here" doc:name="Logger"/> 
</flow> 

Однако этот второй частный поток не работает при вызове из другого потока ... на самом деле, это даже не разобрать. Единственное различие заключается в том, что явное использование таймера-перехватчика изменяется, чтобы быть ссылкой на стек перехватчика, содержащий таймер-перехватчик.

<interceptor-stack name="default"> 
    <timer-interceptor/> 
</interceptor-stack> 

<flow name="test2Flow1" doc:name="test2Flow1"> 
    <interceptor-stack ref="default"/> 
    <logger level="INFO" message="got here" doc:name="Logger"/> 
</flow> 

ответ

0

Я думаю, что ваш поток недействителен, потому что у него нет процессора сообщений.

Посмотрите на анатомию потока.

http://www.mulesoft.org/documentation/display/current/Using+Flows+for+Service+Orchestration#UsingFlowsforServiceOrchestration-TheAnatomyofaFlow

+0

Там есть регистратор, который является процессор. Кроме того, это всего лишь сокращенная версия реальной вещи, которая выполняет довольно много работы. Если я поместил два перехватчика в поток напрямую, он отлично работает. Если я пытаюсь использовать стек перехватчика, он терпит неудачу с ошибкой синтаксического анализа SAX. – TomD

+0

, в этом случае я могу только думать, что вы не можете использовать перехватчик-стек прямо в потоке, попробуйте приблизить Seba – jonfornari

0

Ваш процессор сообщение должно быть первым пунктом в потоке

+0

Это не так в общем. Вы говорите, что это действительно специально для экземпляров перехватчиков? Я отредактирую сообщение (так как я не могу легко поставить код здесь) и показать, что я имею в виду. – TomD

0

Перехватчики предназначаются для использования в компонентах.
Эта конфигурация должна работать:

<interceptor-stack name="default"> 
    <logging-interceptor/> 
    <timer-interceptor/> 
</interceptor-stack> 

<flow name="test2Flow1" doc:name="test2Flow1"> 
    <pooled-component class="com.MyComponent"> 
     <interceptor-stack ref="default"/> <!--this is line 15 --> 
    </pooled-component> 
    <logger level="INFO" message="Got here"/> 
</flow> 
+1

Я пытаюсь обдумать это. Перехватчики, которые я хочу положить в стек, основаны на AbstractEnvelopeInterceptor, чтобы поймать, когда поток введен и вышел. У меня есть один из тех, кто работает, когда это первый элемент внутри потока, не помещая его внутри компонента. Итак, вы говорите, что, если мне нужно больше одного, мне нужно построить фиктивный компонент, просто удерживая стек перехватчиков? Документация Mule по указанному выше URL-адресу дает пример в противном случае. – TomD

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