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