try creating the proxy manually... almost worked every time for me constructor injection will be performed as expected
public static void contributeAlias( ObjectLocator locator, Configuration<AliasContribution> configuration ) { configuration.add( AliasContribution.create( BaseURLSource.class, locator.proxy(BaseURLSource.class,SomeImplementation.class) ); } g, kris "Inge Solvoll" <[EMAIL PROTECTED]> 26.11.2008 11:37 Bitte antworten an "Tapestry users" <users@tapestry.apache.org> An "Tapestry users" <users@tapestry.apache.org> Kopie Thema Re: [T5] Pick up https/http from request Thanks! But this still gives me the same loop error, because I have to inject Request (where you inject SiteServices) into the builder method to access the secure state of the request: Caused by: org.apache.tapestry5.ioc.internal.OperationException: Construction of service 'Alias' has failed due to recursion: the service depends on itself in some way. Please check org.apache.tapestry5.services.TapestryModule.buildAlias(Logger, String, AliasManager, Collection) (at TapestryModule.java:214) for references to another service that is itself dependent on service 'Alias'. Inge On Wed, Nov 26, 2008 at 11:28 AM, Michael Gerzabek <[EMAIL PROTECTED] > wrote: > Inge, > > I did it successfully for a similar purpose: > > @SuppressWarnings("unchecked") > public static void contributeAlias( > @InjectService( "SiteBaseURLSource" ) > BaseURLSource baseUrlSource, > Configuration<AliasContribution> configuration ) { > > configuration.add( AliasContribution.create( > BaseURLSource.class, > baseUrlSource ) ); > > } > > Don't use the binder but create your own build method: > > @Marker( SiteServices.class ) > public static BaseURLSource buildSiteBaseURLSource( > @SiteServices > SiteService site ) { > > return new SiteBaseURLSource( site ); > } > > You can ommit the Marker annotation. > > /Michael > > Solvoll schrieb: > > Hi! >> >> I'm really struggling here as I think I'm approaching a solution. What I'm >> trying to do is to override/decorate/alias/replace the BaseURLSource with >> my >> own implementation, like this: >> >> public class MyBaseURLSource implements BaseURLSource { >> >> private final Request request; >> >> public MyBaseURLSource(Request request) { >> this.request = request; >> } >> >> public String getBaseURL(boolean secure) { >> boolean secureRequest = request.isSecure(); >> String baseURL = String.format("%s://%s", secureRequest ? "https" : >> "http", request.getServerName()); >> return baseURL; >> } >> >> } >> >> >> Essentially, I've copied the default implementation and replaced the usage >> of the secure parameter with the secure value of the request. My problem >> is >> that I'm not capable of putting this code to actual work in the framework. >> >> I've tried: >> - aliasing, but that didn't work because of circular dependency (I have to >> inject the Request) >> - binder.bind(BaseURLSource.class, MyBaseURLSource.class), combinded with >> a >> builder for MyBaseURLSource. Causes redirect loop. >> - Decorating. Not managed to find out how I do this yet, have tried a few >> things. >> >> I'm guessing this is rather simple, it's just a bit complicated when >> you're >> not experienced in IoC... Anyone who wants to point me in the right >> direction? >> >> Regards >> Inge >> >> >> >> On Wed, Nov 19, 2008 at 10:22 AM, Inge Solvoll <[EMAIL PROTECTED] >> >wrote: >> >> >> >>> I voted for this issue now. >>> >>> https://issues.apache.org/jira/browse/TAP5-167 >>> >>> This is really a big issue for our usage of T5, T5 is now forcing us to >>> redirect users away from http access, because we no longer can support >>> both >>> modes as long as T5 is fixed on either http or https. >>> >>> Anyone who's got a working version of a BaseURLSource contribution, that >>> actually can output a URL using the protocol from the initial request? >>> >>> Regards >>> Inge >>> >>> >>> On Mon, Nov 17, 2008 at 8:57 AM, Inge Solvoll <[EMAIL PROTECTED] >>> >wrote: >>> >>> >>> >>>> I know, this isn't really a problem for regular pages, they load using >>>> the >>>> requested protocol, when not marked as secure. But when I create >>>> eventlinks >>>> that updates zones, these don't work when they are generated with http >>>> and >>>> the rest of the page is generated in https... >>>> >>>> What I would like to do is to try some more on the BaseURLSource >>>> approach. >>>> Anyone who's got any idea why this has no effect here? I copied and >>>> pasted >>>> the code from the T5 docs and put in my Appmodule, and the contribute >>>> method >>>> is called on server startup. I replaced the "localhost" url with an >>>> obviously bad url, for testing, but nothing happens, all pages just load >>>> as >>>> always, including eventlinks and actionlinks. >>>> >>>> Inge >>>> >>>> >>>> On Sun, Nov 16, 2008 at 9:44 PM, Carl Crowder <[EMAIL PROTECTED] >>>> >wrote: >>>> >>>> >>>> >>>>> I don't know if you're aware, but if you create a href something like >>>>> >>>>> href="//something.com/page" >>>>> >>>>> then the current protocol is maintained. So if you were viewing the >>>>> page >>>>> at https://something.com the HREF would resolve to >>>>> https://something.com/page and similarly with http. Unfortunately it >>>>> requires using absolute URLs all the time. >>>>> >>>>> I'm not sure if that helps, but perhaps it could be used in fixing that >>>>> issue. >>>>> >>>>> Carl >>>>> >>>>> Inge Solvoll wrote: >>>>> >>>>> >>>>>> Yes, I might. This is a major blow for us, our customers choose freely >>>>>> whether they want to use http or https, so the T5 way of doing things >>>>>> >>>>>> >>>>> just >>>>> >>>>> >>>>>> doesn't work for us... >>>>>> >>>>>> On Fri, Nov 14, 2008 at 9:28 PM, Jonathan Barker < >>>>>> [EMAIL PROTECTED]> wrote: >>>>>> >>>>>> >>>>>> >>>>>>> You might want to vote for this: >>>>>>> >>>>>>> https://issues.apache.org/jira/browse/TAP5-167 >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>>> -----Original Message----- >>>>>>>> From: Inge Solvoll [mailto:[EMAIL PROTECTED] >>>>>>>> Sent: Friday, November 14, 2008 15:10 >>>>>>>> To: Tapestry users >>>>>>>> Subject: Re: [T5] Pick up https/http from request >>>>>>>> >>>>>>>> Thanks! >>>>>>>> >>>>>>>> I tried copying your code into my AppModule with some small >>>>>>>> >>>>>>>> >>>>>>> modifications. >>>>>>> >>>>>>> >>>>>>>> But the code only runs on server startup, not when I access a >>>>>>>> >>>>>>>> >>>>>>> tapestry 5 >>>>> >>>>> >>>>>> page. I tried to add deliberate errors in the code, like naming the >>>>>>>> >>>>>>>> >>>>>>> server >>>>>>> >>>>>>> >>>>>>>> loooocalhost, but I never saw the results when accessing pages. >>>>>>>> >>>>>>>> Also, when I try to add "final HttpServletRequest request" as a >>>>>>>> >>>>>>>> >>>>>>> parameter >>>>> >>>>> >>>>>> to >>>>>>>> the contributeAlias method, my T5.0.13 crashes complaining about >>>>>>>> >>>>>>>> >>>>>>> service >>>>> >>>>> >>>>>> recursion. >>>>>>>> >>>>>>>> What I need is for T5 to figure out that a user accesses a page with >>>>>>>> either >>>>>>>> http or https, and respond on the same protocol... >>>>>>>> >>>>>>>> >>>>>>>> Regards >>>>>>>> Inge >>>>>>>> >>>>>>>> On Fri, Nov 14, 2008 at 4:43 PM, Keith Bottner <[EMAIL PROTECTED]> >>>>>>>> >>>>>>>> >>>>>>> wrote: >>>>>>> >>>>>>> >>>>>>>> I believe you might be able to use an alternation of a solution I >>>>>>>>> >>>>>>>>> >>>>>>>> used >>>>> >>>>> >>>>>> for >>>>>>>> >>>>>>>> >>>>>>>>> getting https to work properly between my development and >>>>>>>>> production >>>>>>>>> servers. >>>>>>>>> >>>>>>>>> public static void contributeAlias(Configuration<AliasContribution> >>>>>>>>> configuration, >>>>>>>>> @Inject @Value("${"+SymbolConstants.PRODUCTION_MODE+"}" ) final >>>>>>>>> >>>>>>>>> >>>>>>>> String >>>>> >>>>> >>>>>> production >>>>>>>>> { >>>>>>>>> if (0 != production.compareToIgnoreCase("true")) >>>>>>>>> { >>>>>>>>> BaseURLSource source = new BaseURLSource() >>>>>>>>> { >>>>>>>>> public String getBaseURL(boolean secure) >>>>>>>>> { >>>>>>>>> String protocol = secure ? "https" : "http"; >>>>>>>>> >>>>>>>>> int port = secure ? 8443 : 8080; >>>>>>>>> >>>>>>>>> return String.format("%s://localhost:%d", >>>>>>>>> >>>>>>>>> >>>>>>>> protocol, >>>>>>> >>>>>>> >>>>>>>> port); >>>>>>>>> } >>>>>>>>> }; >>>>>>>>> >>>>>>>>> >>>>>>>>> configuration.add(AliasContribution.create(BaseURLSource.class, >>>>>>>>> >>>>>>>>> >>>>>>>> source)); >>>>>>>> >>>>>>>> >>>>>>>>> } >>>>>>>>> } >>>>>>>>> >>>>>>>>> Somehow make this dependent on the user selection and return it >>>>>>>>> accordingly. >>>>>>>>> >>>>>>>>> Not a quick solution but possible a direction to try! >>>>>>>>> >>>>>>>>> Keith >>>>>>>>> >>>>>>>>> >>>>>>>>> On Nov 14, 2008, at 7:18 AM, Inge Solvoll wrote: >>>>>>>>> >>>>>>>>> Hi! >>>>>>>>> >>>>>>>>> >>>>>>>>>> My web application is large and consists of Struts, T4 and T5 >>>>>>>>>> >>>>>>>>>> >>>>>>>>> pages. >>>>> >>>>> >>>>>> In >>>>>>> >>>>>>> >>>>>>>> Struts and T4, I use the current http request to figure out whether >>>>>>>>>> >>>>>>>>>> >>>>>>>>> to >>>>> >>>>> >>>>>> use >>>>>>>> >>>>>>>> >>>>>>>>> https or not. Users can choose if they want to log in using https >>>>>>>>>> >>>>>>>>>> >>>>>>>>> or >>>>> >>>>> >>>>>> not. >>>>>>>> >>>>>>>> >>>>>>>>> The chosen protocol is used on all pages after login. >>>>>>>>>> >>>>>>>>>> In T5, this is either a global static setting, or a static setting >>>>>>>>>> >>>>>>>>>> >>>>>>>>> per >>>>> >>>>> >>>>>> page. >>>>>>>>>> Is there a service or something I can override to implement my own >>>>>>>>>> "protocol >>>>>>>>>> builder"? Something like this: >>>>>>>>>> >>>>>>>>>> public class HttpProtocolBuilder { >>>>>>>>>> public HttpProtocolBuilder (final HttpServletRequest request) { >>>>>>>>>> this.request = request >>>>>>>>>> } >>>>>>>>>> >>>>>>>>>> public String getProtocol() { >>>>>>>>>> if (request.isSecure()) { >>>>>>>>>> return "https"; >>>>>>>>>> } >>>>>>>>>> else { >>>>>>>>>> return "http"; >>>>>>>>>> } >>>>>>>>>> } >>>>>>>>>> >>>>>>>>>> Regards >>>>>>>>>> >>>>>>>>>> Inge >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>> --------------------------------------------------------------------- >>>>> >>>>> >>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>>>>>>>> For additional commands, e-mail: [EMAIL PROTECTED] >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> --------------------------------------------------------------------- >>>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>>>>>> For additional commands, e-mail: [EMAIL PROTECTED] >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> --------------------------------------------------------------------- >>>>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>>>> For additional commands, e-mail: [EMAIL PROTECTED] >>>>> >>>>> >>>>> >>>>> >>>> >> >> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > >