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" <[email protected]>
An
"Tapestry users" <[email protected]>
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]
>
>