cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "willem Jiang (JIRA)" <j...@apache.org>
Subject [jira] Commented: (CXF-621) org.apache.cxf.bus.spring.BusApplicationContext constructor does not respect "include defaults" flag
Date Wed, 02 May 2007 17:05:23 GMT

    [ https://issues.apache.org/jira/browse/CXF-621?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12493147
] 

willem Jiang commented on CXF-621:
----------------------------------

Hi Steven 

BusApplicationContext was updated to entends ClassPathXmlApplicationContext in 29th Apr. 
The jars you use could be out of date. You can run the mvn install in the cxf trunk to update
you local mvn repository.
I just went through the springBusFactoryTest, everything is ok, if I don't explicitly import
"classpath:META-INF/cxf/cxf.xml" in my cxf.xml file

Willem.



> org.apache.cxf.bus.spring.BusApplicationContext constructor does not respect "include
defaults" flag

> ------------------------------------------------------------------------------------------------------
>
>                 Key: CXF-621
>                 URL: https://issues.apache.org/jira/browse/CXF-621
>             Project: CXF
>          Issue Type: Bug
>          Components: Bus
>    Affects Versions: 2.0-RC
>         Environment: NA
>            Reporter: Steven E. Harris
>         Assigned To: willem Jiang
>             Fix For: 2.0
>
>         Attachments: bus_fixes.patch, bus_fixes_post_cs.patch
>
>
> BusApplicationContext's constructors accept a boolean argument "include" to indicate
whether it should try to load the default configuration files discovered on the class path.
The problem comes from poor interaction among initialization of a member variable (includeDefaults)
and the overridden method getConfigResources().
> Two of the constructors have similar form:
>     public BusApplicationContext(String cf, boolean include, ApplicationContext parent)
{
>         super((String[])null, parent);
>         cfgFile = cf;
>         includeDefaults = include;
>     }
> Note that "includeDefaults" is not initialized until the base class constructor returns.
However, as part of the base constructor chain, ClassPathXmlApplicationContext calls refresh(),
which triggers a long call chain that results in getConfigResources() being called.
> BusApplicationContext overrides getConfigResources(). One of the first things it does
is reads its "includeDefaults" flag -- but at this point the flag has not been initialized
by the constructor, so it defaults to false. Therefore, no matter what the value of the "include"
parameter to the BusApplicationContext constructor, only a false value gets used during construction.
> Unfortunately, there's no way to do anything such as initializing member variables before
calling the superclass's constructor. Therefore, the fix is to call on a different ClassPathXmlApplicationContext
constructor -- the one that takes a boolean flag indicating whether to refresh() immediately.
We can pass false, initialize our member variables, then call refresh() explicitly:
>     public BusApplicationContext(String cf, boolean include, ApplicationContext parent)
{
>         super((String[])null, false, parent);
>         cfgFile = cf;
>         includeDefaults = include;
>         refresh();
>     }
> I haven't tested this code, but it looks like it should fix the problem.

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


Mime
View raw message