[ 
https://issues.apache.org/jira/browse/SYNAPSE-451?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12631903#action_12631903
 ] 

Andreas Veithen commented on SYNAPSE-451:
-----------------------------------------

I fixed FilterMediator. I will to the others later.

> Selection Mediators don't carry initialization through all branches
> -------------------------------------------------------------------
>
>                 Key: SYNAPSE-451
>                 URL: https://issues.apache.org/jira/browse/SYNAPSE-451
>             Project: Synapse
>          Issue Type: Bug
>          Components: Core
>            Reporter: Lucas Moten
>            Assignee: Andreas Veithen
>
> See also: JIRAs <a 
> href="https://issues.apache.org/jira/browse/SYNAPSE-437";>Apache 
> SYNAPSE-437</a>, <a href="https://wso2.org/jira/browse/ESBJAVA-422";>WSO2 
> ESBJAVA-422</a>
> Thus far, this mostly appears to be an issue with CalloutMediator, because 
> it's mediate method depends upon init() having been run to setup the 
> ServiceClient.
> A FilterMediator extends AbstractListMediator, but for the else branch, uses 
> a ListMediator.
> When synapse initializes inline sequences as part of SynapseConfiguration, 
> the init method of SequenceMediator is called.  This in turn calls init of 
> its superclass, which is AbstractListMediator.  In that class, all child 
> mediators that are instances of ManagedLifecycle are in turn initialized.
> For the FilterMediator, the 'then' branch, as an AbstractListMediator being 
> an instance of ManagedLifecycle is initialized at startup.  However, the 
> 'else' branch, being declared as a ListMediator, will not be.  Thus, it 
> appears as though any mediator requiring initialization inside of the Filter 
> else branch will fail (NullPointerException) when it is referenced.
> The workaround is to use named sequences wherever possible, and reference 
> that instead, as the 'else' branch of a FilterMediator can alternatively use 
> an elseKey.
> However, this workaround appears to have limits when it comes to the 
> SwitchMediator.  Inline sequences are handled inside of SwitchCase as an 
> AnonymousListMediator and like the FilterMediator, aren't initialized by top 
> level in/out inline target sequences.  Since SwitchMediators don't have the 
> option of referencing a registry key for a named sequence initialized at 
> startup, I believe this breaks the ability to run certain child mediators 
> that require initialization of objects that only occur when init is called.
> For example, this cannot work because the inline sequence is not initialized
> <switch>
>   <case>
>     <callout>...</callout>
>   </case>
> </switch>
> For filters, this cannot work because inline sequences are not initialized
> <filter>
>   <then>..</then>
>   <else>
>     <callout>
>   </else>
> </filter>
> But this can
> <filter>
>   <callout>
> </filter>
> as can this
> <filter>
>   <then>
>     <callout>
>   </then>
> </filter>
> and this
> <sequence name="namedsequence">
>   <callout>
> </sequence>
> <filter>
>   <then>..</then>
>   <else sequence="namedsequence">
> </filter>

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to