Got rid of the recursion error on startup by doing @InjectService("Request") Request request
instead of final Request request Now I'm back to the redirect loop problem. I have confirmed that my getBaseURL method is called in a loop, and the default getBaseURL method is never called. Why the loop??? Inge On Wed, Nov 26, 2008 at 11:37 AM, Inge Solvoll <[EMAIL PROTECTED]>wrote: > 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] >> >> >