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]
>>
>>
>

Reply via email to