Hi, I see you are using a webapp so you can also use the Spring 3.1 context initialiser interface to add properties to the Environment. Registering them in the environment directly allows such things as imports to register values from properties files. I will still keep looking to see if I can update the http conduit configurer to use context:property-placeholder configuration, but it would at least clean up your code:
http://blog.springsource.org/2011/02/15/spring-3-1-m1-unified-property-management/ <context-param> <param-name>contextInitializerClasses</param-name> <param-value>com.bank.MyInitializer</param-value> </context-param> public class MyInitializer implements ApplicationContextInitializer<ConfigurableWebApplicationContext> { public void initialize(ConfigurableWebApplicationContext ctx) { PropertySource ps = new MyPropertySource(); ctx.getEnvironment().getPropertySources().addFirst(ps); // perform any other initialization of the context ... } } On Tue, Mar 26, 2013 at 9:26 PM, Jason Pell <[email protected]> wrote: > Hi, > > When I get a chance I was planning to work out how to get this working > without using the environment stuff and using properties placeholder > configurer > > Sent from my Galaxy S2 > > On Mar 14, 2013 4:56 AM, "Oliver Moser" <[email protected]> wrote: >> >> Hi Dan >> >> On 2013-03-13 18:42, Daniel Kulp wrote: >>> >>> On Mar 13, 2013, at 10:07 AM, Oliver Moser <[email protected]> wrote: >>> >>>> Hi Glen >>>> >>>> On 2013-03-13 14:38, Glen Mazza wrote: >>>>> >>>>> I don't have an answer to your question, but to clarify, are you >>>>> saying that if you upgraded to the latest CXF 2.7.3 Jason's approach >>>>> would work for you? (Is doing such an upgrade an option for you if it >>>>> would?) >>>> >>>> I don't know if upgrading would make Jason's approach work for me, but >>>> somehow I assumed that his approach was intended for CXF 2.4 (jira says >>>> affected version 2.4.3) >>>> >>>> Anyways, I can give it a try an upgrade to CXF 2.7, but I'm not sure if >>>> that will help. >>>> >>>> Question for me that still remains is how to replace the default >>>> configurer, so that I can handle the property placeholders in my own >>>> implementation. >>> >>> >>> You can always do a: >>> >>> Configurer cfg = bus.getExtension(Configurer.class); >>> cfg = new MyCustomConfigurer(cfg); >>> bus.setExtension(cfg, Configurer.class); >>> >>> where MyCustomConfigurer wrappers the original and delegates to it >>> for anything you don't handle yourself (conduits). >> >> Thanks. >> >> On the other hand, I just finished upgrading to 2.7.3, and with this >> version, Jason's approach (the >> "PropertyPlaceholderResolvingConduitConfigurer") seems to work. Looks like >> some things changed in this regard from 2.6 to 2.7. >> >> However, I still have to explicitly add the Properties that holds the >> endpoints urls (${client1.url} in my sample below) using >> >> ((ConfigurableApplicationContext)context).getEnvironment(). >> getPropertySources().addFirst(new >> ResourcePropertySource(additionalProperties)); // <-- additionalProperties >> points to "/WEB-INF/backends-local.properties" >> >> in setApplicationContext() of the HTTPConduitConfigurer implementation. >> I'm not sure why the properties that I have configured using >> >> <context:property-placeholder >> location="/WEB-INF/backends-local.properties"/> >> >> are not available at the time the HTTPConduitConfigurer is initialized. >> Also played with depends-on, but that didn't do the trick. >> >> cheers >> >> >>> >>> Dan >>> >>> >>> >>> >>>> >>>> cheers >>>> >>>> Oliver >>>> >>>> >>>>> >>>>> Glen >>>>> >>>>> On 03/13/2013 06:32 AM, Oliver Moser wrote: >>>>>> >>>>>> Hi Glen >>>>>> >>>>>> On 2013-03-12 22:03, Glen Mazza wrote: >>>>>>> >>>>>>> Hmm. http-conf configuration is for a specific port, and it's >>>>>>> presently assumed that the properties for that port would be the same >>>>>>> regardless of the client connecting to it. Dan Kulp informed me on >>>>>>> IRC there's already a JIRA request to provide something quite similar >>>>>>> to what you're requesting >>>>>>> (https://issues.apache.org/jira/browse/CXF-4811). >>>>>> >>>>>> I had a look at the jira. However, the approach Jason posted does not >>>>>> work for me. >>>>>> >>>>>> I'm using cxf 2.6.1, and the PatternSyntaxException happens during >>>>>> initialization of the spring bus. >>>>>> >>>>>> setApplicationContext() in SpringBus.java also sets the various >>>>>> extensions, amongst them >>>>>> >>>>>> ... >>>>>> setExtension(new ConfigurerImpl(applicationContext), >>>>>> Configurer.class); >>>>>> ... >>>>>> >>>>>> ConfigurerImpl parses the bean definitions for wildcards (via >>>>>> initWildcardDefinitionMap()), and this is where the PatternException >>>>>> occurs. >>>>>> >>>>>> So, is there a way to replace the default configurer with a custom >>>>>> configurer that basically does what Jasons custom conduit configurer >>>>>> does? >>>>>> I.e. first replace property placeholders and run the pattern matcher on >>>>>> the >>>>>> resulting string? >>>>>> >>>>>> cheers >>>>>> >>>>>> Oliver >>>>>> >>>>>> >>>>>> >>>>>>> >>>>>>> It would be messy, but if you configure two configuration files, one >>>>>>> for each client, each having a different http-conf configuration, and >>>>>>> reference them from the same Java class, that *might* work (unsure - >>>>>>> haven't tested it.) >>>>>>> >>>>>>> Glen >>>>>>> >>>>>>> On 03/12/2013 11:27 AM, Oliver Moser wrote: >>>>>>>> >>>>>>>> Hi >>>>>>>> >>>>>>>> I recently stumbled over a configuration issue with http conduits >>>>>>>> that i'm still not able to resolve. >>>>>>>> >>>>>>>> I have two jaxws:clients configured that have the same service class >>>>>>>> associated: >>>>>>>> >>>>>>>> <jaxws:client id="client1" >>>>>>>> serviceClass="a.b.c.PortType" >>>>>>>> address="${client1.url}" >>>>>>>> username="${client1.username}" >>>>>>>> password="${client1.password}"> >>>>>>>> </jaxws:client> >>>>>>>> >>>>>>>> <jaxws:client id="client2" >>>>>>>> serviceClass="a.b.c.PortType" >>>>>>>> address="${client2.url}" >>>>>>>> username="${client2.sysid}" >>>>>>>> password="${client2.password}"> >>>>>>>> </jaxws:client> >>>>>>>> >>>>>>>> How can I configure two seperate http-conf:conduits that have >>>>>>>> different settings for proxy, timeout etc.? I cannot reference it via >>>>>>>> "{http://acme.com/}PortType" since they are the same for both clients, >>>>>>>> nor >>>>>>>> can I use wildcards. What would work is if I could use the property >>>>>>>> placeholders for the URLs, since the endpoints are different: >>>>>>>> >>>>>>>> >>>>>>>> <http-conf:conduit name="${client1.url}"> >>>>>>>> <http-conf:client ConnectionTimeout="10000" >>>>>>>> ReceiveTimeout="20000" >>>>>>>> ProxyServer="${proxy.host}" >>>>>>>> ProxyServerPort="${proxy.port}"/> >>>>>>>> </http-conf:conduit> >>>>>>>> >>>>>>>> <http-conf:conduit name="${client2.url}"> >>>>>>>> <http-conf:client ConnectionTimeout="30000" >>>>>>>> ReceiveTimeout="40000"/> >>>>>>>> </http-conf:conduit> >>>>>>>> >>>>>>>> However, a regex is expected in this case, and hence this try fails >>>>>>>> with a PatternSyntaxException. >>>>>>>> >>>>>>>> anyone got an idea on how to solve this? Maybe I miss something. >>>>>>>> >>>>>>>> cheers >>>>>>>> >>>>>> >>>> >>>> -- >>>> Oliver Moser >> >> >> -- >> Oliver Moser
