Re: [wsrp-interfaces] Applet resources through WSRP

From
"[ike Daffyn"
Date
2005-03-24T18:36:34+00:00
ID
00c701c530a0$64e1fe00$0202a8c0@MIKECHOME
Thread
Re: [wsrp-interfaces] Applet resources through WSRP
I see how the consumer would rewrite the url in the 
portlet markup

 

<link rel="stylesheet" type="text/css" 
href="wsrp-rewrite?wsrp-url=http://producer/portal/applications/MyPortlet/css/my.css&requiresRewrite=True"\>

 

 

and then the stylesheet itself 
contains

 

backimage {

    
background-image:url(wsrp-rewrite?wsrp-url=http://producer/portal/applications/MyPortlet/images/bcg.gif&requiresRewrite=false);

        
}

 

but not if the stylesheet contains

 

backimage {

    
background-image:url(wsrp-rewrite?wsrp-url=images/bcg.gif&requiresRewrite=false);

}

 

This is the bit I don't get "The consumer has has enough information to convert relative URL 
images/bcg.gif"

 

This part I do not see as being part of the WSRP 
spec and consumers required to process relative to absolute urls.

 

If the producer has a wrapper for resource css 
stylesheet that takes the 

 

backimage{

    
background-image:url(images/bcg.gif);

}

and converts it to 

 

backimage {

    
background-image:url(wsrp-rewrite?wsrp-url=http://producer/portal/applications/MyPortlet/images/bcg.gif&requiresRewrite=false);

        
}

 

before it is sent back to the consumer then 
everything works fine.

 

Mike

----- Original Message ----- 

  
From: 
  Spector, 
  Artem 

  
To:  
  

  
Sent: Thursday, March 24, 2005 11:11 
  AM

  
Subject: RE: [wsrp-interfaces] Applet 
  resources through WSRP

  

  

  
Please note that in 
  my example the wsrp-url is absolute (step 4), though the Portlet code operates 
  with relative URLs.

  
 

  
As for the relative 
  urls contained in other resources, they can be rewritten by the Consumers 
  without any assistance from the Producers.

  
I’ve tried to show 
  that when the Consumer processes the request

  
GET  http://consumer/portal/resources/my.css?wsrpUrl=http://producer/portal/applications/MyPortlet/css/my.css&requiresRewrite=true

  
and parses the input 
  stream, it has enough information to convert relative URL images/bcg.gif into something 
  like

  
“/portal/resources/bcg.gif?wsrpUrl=http://producer/portal/applications/MyPortlet/images/bcg.gif&requiresRewrite=false”

  
 

  
Doesn’t the spec 
  require the Consumers to respect the wsrp-requiresRewrite 
  flag?

  
 

  
Artem

  
 

  

  

  
  

  
From: Mike 
  Caffyn [mailto:] 
Sent: Thursday, March 24, 2005 5:08 
  PM
To: 
  
Subject: Re: [wsrp-interfaces] Applet 
  resources through WSRP

  
 

  

  

  
 

  

  
Currently the spec says wsrp-url 
  for a resource must be an absolute address, so I would guess not many 
  consumers would support this relative address as you specify. I have also 
  noticed not many consumers support rewriting of resources that are referenced 
  in another resource. For example an CSS stylesheet that contains another CSS 
  stylesheet reference.

  

  
 

  

  
Currently the producers would have 
  to be involved in the generating the urls for images within the markup and in 
  the resource processing of a css stylesheet (unless they contained absolute 
  addresses, this would be a nightmare in deployment). All they would be doing 
  is replacing the relative address with an absolute address so it is wsrp 
  specific when required ie not running in local 
  mode.

  

  
 

  

  
 

  

  
Mike

  

  
 

  
    

    
----- Original Message ----- 
    

    

    
From: Spector, 
    Artem 

    

    
To:  
    

    

    
Sent: 
    Thursday, March 24, 2005 9:15 AM

    

    
Subject: RE: 
    [wsrp-interfaces] Applet resources through 
    WSRP

    

    
 

    
Let’s 
    look into the flow for a simple example, when a Portlet MyPortlet was deployed with a style 
    sheet (relative path “css/my.css”) which contains a URL of a 
    background image “images/bcg.gif”.

    
      
The Portlet begins with the 
      local path and outputs to the response stream the string: “css/my.css”. 
      
The response wrapper 
      constructs a relative URL which contains the servlet path (based on the 
      request). The result looks like this: “/portal/applications/MyPortlet/css/my.css” 
      

    
 

    
Now we have two 
    different scenarios: local portal and WSRP.

    
 

    
Local Portal 
    scenario:

    
 

    
The page content 
    includes the URL as it was created on step 2: “/portal/applications/MyPortlet/css/my.css”

    
Note that the image 
    URL inside the css is still “images/bcg.gif”.

    
Now for these two 
    resources the browser issues the following 
    requests:

    
GET      
    http://producer/portal/applications/MyPortlet/css/my.css

    
GET      
    http://producer/portal/applications/MyPortlet/images/bcg.gif

    
Everything is OK in 
    this case.

    
 

    
WSRP 
    scenario:

    
 

    
Here we have some 
    additional steps before the content gets to the 
    browser:

    
 

    
      
The Producer response wrapper 
      converts the URL to absolute (based on the request) and the result is: 
      “http://producer/portal/applications/MyPortlet/css/my.css” 
      
      
The Producer embeds the 
      absolute URL into the resource template (or the Consumer rewrites the 
      URL): “/portal/resources/my.css?producerUrl=http://producer/portal/applications/MyPortlet/css/my.css&rewriteUrl=true” 
      

    
When the page is 
    downloaded to the browser, it issues the following request:
GET            
    http://consumer/portal/resources/my.css?producerUrl=http://producer/portal/applications/MyPortlet/css/my.css&rewriteUrl=true

    
 

    
Now the Consumer 
    must parse the content of the resource being downloaded and rewrite the 
    URLs. 

    
Obviously the 
    result of rewriting of “images/bcg.gif” should 
    be:

    
“/portal/resources/bcg.gif?producerUrl=http://producer/portal/applications/MyPortlet/images/bcg.gif&rewriteUrl=false”

    
But the Consumer 
    cannot compose it because it doesn’t know the producer-side servlet path 
    (highlighted).

    
 

    
On the second 
    thought the Consumer can compose the result URL using the producer servlet 
    path taken from the current request, assuming the inside URLs are relative. 
    This could work! I’ll try it out…

    
 

    
Artem

    

    

    
    

    
From: Rich 
    Thompson [mailto:] 
Sent: Wednesday, March 23, 2005 9:29 
    PM
To: 
    
Subject: Re: [wsrp-interfaces] Applet 
    resources through WSRP

    
 

    

If people don't 
    mind, lets walk into this carefully (I am certainly not an expert on how 
    portals manage urls). 

Consider, for the local portlet 
    case, how the eventual urls gets constructed: 
1. 
           The Portlet begins with a 
    local/relative URL; example: relative path to a CSS file 
2. 
           The Portal adds to the URL items 
    such as host and context path to form an absolute url 
3.     
       The loaded resource contains a local/relative 
    URL; example: a style specifies a background gif 
4.     
       The xxx forms the absolute url. 
  
    
If xxx in step #4 is the 
    browser, I would think it would use the baseURL of the page and therefore 
    construct an absolute url which failed to point at the gif. If instead it 
    uses the url of the css file, I would suspect the relative reference to work 
    (including working with WSRP). 

if xxx in step #4 
    is the Portal, I would think it already has a facility for preprocessing 
    resources that could be leveraged to generate WSRP type urls using either 
    Consumer url rewriting or Producer template processing. 
    

Rich 
    

    
      
      

        
          
"Spector, 
          Artem" <> 
          

          
03/23/05 11:31 
          AM 

        
          
            
            

              
                
To

              
                
<> 
                

            

              
                
cc

              
                
 

            

              
                
Subject

              
                
RE: [Fwd: Re: 
                [wsrp-interfaces] Applet resources through 
                WSRP]

          
 

          
            
            

              
                
 

              
                
 

          

    

Yes, the “entire user experience” was 
    our purpose. From that point of view the URL string of some resource should 
    be the same whether this URL “originates” from a Portlet code or from a 
    resource text. 
  
Usually building of Portlet-originated URL 
    takes 3 steps: 
1.       
     The Portlet begins with a local/relative URL 
2. 
           The Producer adds to the URL the 
    servlet path (including host and context path) 
3.     
       The Consumer wraps the producer-side URL with its 
    own servlet path (using templates or consumer-side rewriting). 
  
    
Now let’s consider a resource file containing some local URL. If the 
    Producer just indicates wsrp-requiresRewrite, then the Consumer has to deal 
    with this local URL directly. Returning to the 3-step example, the step 2 is 
    missing. 
  
Honestly I don’t see how the Consumer-side 
    parsing/rewriting of resource content can be implemented without any 
    Producer assistance. 
  
Artem 
  

    
 

    

    
    

    

From: Rich 
    Thompson [mailto:] 
Sent: Wednesday, March 23, 2005 
    5:28 PM
To: Subbu 
    Allamaraju
Subject: Re: 
    [wsrp-interfaces] Applet resources through WSRP 
  
    

I agree with the issues you 
    raise. However, if the Producer is doing the url production, it must do it 
    in a manner that will work for the entire user experience ... including 
    resources. The idea would be to point out these issues to implementers and 
    provide some guidance on how they could be addressed. One of the options 
    could be to use templates for url production in the markup and then mark 
    resource as needing Consumer url rewriting, but Artem points out that other 
    options exist if the Producer is willing to manage things 
    properly. 

Rich 
    

    
      
      

        
          
Subbu 
          Allamaraju <> 
          

          
03/23/05 10:17 
          AM 

        
          
 

          
            
            

              
                
To

              
                
 
                

            

              
                
cc

              
                
  
            

            

              
                
Subject

              
                
Re: 
                [wsrp-interfaces] Applet resources through 
                WSRP

          

  

          
 

          
            
            

              
                
  

              
                
 

          

    

I agree 
    with that. I'm referring to your comment "the Producer must also 
use the 
    templates on the relevant urls within the resource". Such a 
requirement, 
    if placed, would assume that the Producer has control over 
resource 
    serving, and that it has the templates handy. Both of these may 
not be 
    true in most cases.

Subbu

Rich Thompson wrote:
> 
    
> Section 10.2.1.1.3.2 of WSRP v1 lays the burden on the Consumer to 
    parse 
> and rewrite urls for resources that set wsrp-requiresRewrite 
    to true. 
> Discussion of this requirement within the TC limited the 
    burden to 
> string parsing with a replacement of matching substrings. 
    As such, all 
> textual types, including CSS, should be parsed. It is 
    likely best if the 
> Consumer is agnostic to the resource's mimetype 
    other than a 
> determination of what, if any, of the rewritten url 
    needs to be escaped 
> in order for it to be valid within the 
    containing document.
> 
> Rich
> 
> 
> *Subbu 
    Allamaraju <>*
> 
> 03/23/05 09:58 AM
> 
    
>                 
     
> To
>               
       
> cc
>   
                   
> 
    Subject
>                 
     Re: [wsrp-interfaces] Applet resources through WSRP
> 
> 
    
>                 
     
> 
> 
> 
> 
> 
> Rich Thompson 
    wrote:
>  >
>  > It sounds like you are mixing 
    two issues here:
>  >
>  >    1. You 
    have validated that applet use has the same issues as any
>  > 
          other url, but not a large set of new issues. As a 
    special note;
>  >       resource urls require 
    full name preservation, whether it be a .gif
>  >   
        or a .jar.
>  >    2. When Producers 
    use templates for url production and referenced
>  >   
        resources also contain urls, the Producer must also use 
    the
> 
> Can you confirm if the spec requires Producers to 
    rewrite resources it
> is serving over HTTP? AFAIR, this is only a 
    requirement on Consumers
> when the MIME type of the resource is 
    text/xml-like. I think the
> requirement on Producers  has 
    implications that we've not discussed in
> detail.
> 
> 
     >       templates on the relevant urls within the 
    resource. This will
>  >       become easier 
    with the new getResource operation (important pieces
>  > 
          of data are passed on the invocation), but can be also 
    done by
>  >       providing a resolver and 
    passing any required info on the url (or
>  >     
      in cookies, though I would prefer to not explicitly name that
> 
     >       option). Note: this includes namespace 
    resolving as well as url
>  >       
    rewriting.
>  >
>  >
>  > 
    Rereading your post, is there also an issue with not all Consumers
> 
     > rewriting urls within resources (as per the specs 
    requirements)?
>  >
>  > I think a couple of 
    additions to the FAQ and Primer from this
>  > information 
    might be in order.
>  >
>  > Rich
> 
     >
>  >
>  > *"Spector, Artem" 
    <>*
>  >
>  > 
    03/23/05 05:03 AM
>  >
>  >       
               
>  > To
> 
     >                 
     <>
>  > 
    cc
>  >               
       
>  > Subject
>  >     
                 RE: [wsrp-interfaces] Applet 
    resources through WSRP
>  >
>  >
> 
     >                 
     
>  >
>  >
>  >
> 
     >
>  >
>  > Yes, we’ve found a solution 
    (we work together with Avi) and I’d like to
>  > share it with 
    you.
>  >  
>  > Actually there are two 
    challenges when composing consumer-side URLs for
>  > 
    producer-side resources:
>  > 1.        In 
    some cases the resource name must be preserved in the
>  > 
    consumer-side URL (like .jar for applets)
>  > 2.   
         Nested resources – if a css contains URLs, they must 
    be
>  > rewritten as well.
>  >  
> 
     > The solution includes the following aspects:
>  > 
    1.        The Consumer modifies the URLs so that they 
    will end up with
>  > the resource names.
>  > 
    2.        The Portlets use a standard API to output 
    resource URLs. In
>  > WSRP scenario these calls are 
    intercepted by the Producer, which does
>  > the necessary 
    conversions (for example, URL writing using templates).
>  > 
    3.        If the URL references a resource containing 
    other URLs (like
>  > css or js), the producer replaces the 
    resource URL with a URL pointing
>  > to a special 
    producer-side servlet. This servlet acts as a filter when
>  > 
    downloading the resource, and rewrites all the URLs it contains.
> 
     >  
>  > For illustration imagine a Portlet 
    called *ExamplePortlet* which was
>  > deployed with image 
    resource */images/r1.gif*. Its consumer-side URL
>  > will 
    look like this:
>  > 
> 
    _http://consumer.com/portal/consumer/resources/r1.gif?producerUrl=http://producer.com/portlets/ExamplePortlet/images/r1.gif_ 
    
> 
>  >
>  >  
>  > If 
    the Portlet has a style sheet resource */css/r2.css*, its URL will
> 
     > look like this:
>  > 
> 
    _http://consumer.com/portal/consumer/resources/r2.css?producerUrl=http://producer.com/producer/resources/r2.css?resourceUrl=http://producer.com/portlets/ExamplePortlet/css/r2.css_ 
    
> 
>  >
>  >  
>  > 
    Now if r2.css contains a reference to r1.gif, then the producer-side
> 
     > servlet (producer/resources) will invoke the Producer URL writing 
    logic
>  > for this URL. So eventually the image URL returned 
    to the client within
>  > the style sheet will exactly as in 
    the first example.
>  >  
>  > 
    Regards,
>  > Artem
>  >  
> 
     >  
>  >
>  > 
    ------------------------------------------------------------------------
> 
     >
>  > *From:* Rich Thompson 
    [mailto:] *
>  > Sent:* Tuesday, March 22, 
    2005 9:58 PM*
>  > To:* 
    *
>  > Subject:* Re: 
    [wsrp-interfaces] Applet resources through WSRP
>  > 
     
>  >
>  > I have been asked this question 
    now by several people ... has anyone
>  > tried referencing an 
    applet in markup from a WSRP portlet? If so, any
>  > 
    guidelines that should be shared with portlet developers?
> 
     >
>  > Rich
>  >
>  > 
    *Subbu Allamaraju <>*
>  >
> 
     > 01/26/05 08:07 AM
>  >
>  >   
                   
>  > 
    To
>  >               
       
>  > 
    cc
>  >               
       
>  > Subject
>  >     
                 Re: [wsrp-interfaces] Apptel 
    resources through WSRP
>  >
>  >
> 
     >  
>  >
>  >
>  > 
                      
     
>  >
>  >
>  >
> 
     >
>  >
>  >
>  > Is the 
    Producer returning the Content-Type header? I've not tried applet
> 
     > downloading, but if Content-Type does not work, I would try 
    the
>  > Content-Disposition header, e.g. with a "inline; 
    filename=foo.jar"
>  > value. In any case, the Consumer has to 
    proxy these headers to the 
> browser.
>  >
> 
     > Regards,
>  >
>  > Subbu
> 
     >
>  > Klein, Avi wrote:
>  > 
     > Hi,
>  >  >
>  >  > 
     
>  >  >
>  >  > I wonder 
    if someone has dealt with fetching of applet as resource.
>  > 
     >
>  >  >  
>  > 
     >
>  >  > Whenever rewriting the URL of the 
    applet, the browser fails to 
> fetch it
>  >  > 
    since it expects the URL to end with *.jar and not with the 
> 
    consumer URL
>  >  > (result of the 
    rewriting).
>  >  >
>  >  > 
     
>  >  >
>  >  > 
     
>  >  >
>  >  > 
    Thanks,
>  >  >
>  >  > 
     
>  >  >
>  >  > 
    Avi.
>  >  >
>  >
> 
>