[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: RE: [wsrp-interop] Oracle producer expects URL-decoded navigational state?
I don't see a problem with this approach. However I see two valid options: 1. Consumer does alwas decode before passing params back to the producer. This makes it independant of HTTP/App server and browser behaviour. There might be implementations that don't pass the URL parms already decoded to the consumer? Therefor the Consumer can't rely on the web stack and has to always decode? I think the whole discussion would be unnecessery if we knew that URL params are always delivered back decoded, i.e. in the servletRequest you receive the params decoded. Do you know a pointer to such a statement? The drawback is that the decoding step is there even if it wouldn't be necessary because the producer has choosen to not use unsafe chars in navState. 2. Producer always decodes when it knows that it encoded these params. So even if the consumer passes encoded or decoded params, the result on the producer is always the same. Second the decoding step is only done where necessary, producers which know that there are no unsafe chars simple do not URL encode/decode. This might be true because Producers might choose to have another encoding schema which is URL-safe. In that case the Consumer always would decode even if it wouldn't be necessary, i.e. String = decode(String). The drawback is that the consumer would have to accept both an encoded value or a decoded value. And then decode these. In both cases the producer would receive the same result. On the Consumer side this would be completly transparent, the consumer would put the vaue in the param fields as it received it from the HTTP/App server. Thinking about it it seems to me that 1. is seems safer and deterministic. 2. however seems to have performance gains. I would like whether there is a spec or another document saying that URLencoded params in URLs are passed back decoded by the HTTP/App server? If this is the case the consumer would be safe to not decode (because it received already decoded values) and then 2 would disappear and the disadvantage in 1. would disappear also. Mit freundlichen Gruessen / best regards, Richard Jacob ______________________________________________________ IBM Lab Boeblingen, Germany Dept.8288, WebSphere Portal Server Development Phone: ++49 7031 16-3469 - Fax: ++49 7031 16-4888 Email: mailto:richard.jacob@de.ibm.com |---------+----------------------------> | | Rich | | | Thompson/Watson/I| | | BM@IBMUS | | | | | | 07/25/2003 05:18 | | | PM | |---------+----------------------------> >--------------------------------------------------------------------------------------------------------------------------------------------------| | | | To: wsrp-interop@lists.oasis-open.org | | cc: | | Subject: RE: [wsrp-interop] Oracle producer expects URL-decoded navigational state? | >--------------------------------------------------------------------------------------------------------------------------------------------------| I think we are in violent agreement. Values are not to be encoded when they are appearing in the protocol's fields, but are to be encoded when inserted into URLs within the markup. I think the question starting this discussion was what should the Consumer do relative to opaque values which were encoded into the URL. What I heard from the discussion of current web servers is that the only truly interoperable approach will be to have the Consumer do a decode on the incoming parameters. This provides a well-defined behavior for Producers/Portlets which happens to mimic the behavior they experience with the web server today. Explicitly, this behavior is: - Producer/Portlet always encodes values being written into URLs - Consumer always decodes values received when an URL is activated before filling in the fields passed to the Producer Anyone see problems with this approach? Rich Thompson Andre Kramer <andre.kramer@eu.citrix.c To: Rich om> Thompson/Watson/IBM@IBMUS, wsrp-interop@lists.oasis-open.org cc: 07/25/2003 09:48 AM Subject: RE: [wsrp-interop] Oracle producer expects URL-decoded navigation al state? They are no different in that they are encoded when placed in a URL, agree. However, values for mode and window state may be supplied by the consumer (e.g. via a "wsrp:150%WindowSize" decoration) and it seems very strange for consumers to have to encode such consumer generated values before sending them via SOAP (which does its own encoding) just so that the producer can decode all values it receives as input (as if they came in from a URL). Hope the RegistrationData fields are not to be URL encoded too. Either we send all values unencoded in the protocol (except in markup where they are encoded of course) or specify each field that needs to be (redundantly) URL encoded in the protocol (and mode and window state values can be same as nav state and interaction state in this list). regards, Andre -----Original Message----- From: Rich Thompson [mailto:richt2@us.ibm.com] Sent: 25 July 2003 14:09 To: wsrp-interop@lists.oasis-open.org Subject: RE: [wsrp-interop] Oracle producer expects URL-decoded navigational state? Why treat window state and mode values differently? The spec requires that all parameters be encoded when written in an URL ... including these as the URL is otherwise ill-formed. The spec also restricts the values flowing across the protocol to those defined by the spec and the relevant RegistrationData fields. It then requires that any other value be treated as if it were "wsrp:view". Rich Thompson Andre Kramer <andre.kramer@eu.citrix To: "'Richard Jacob'" .com> <richard.jacob@de.ibm.com>, Andre Kramer <andre.kramer@eu.citrix.com> cc: 07/25/2003 04:49 AM wsrp-interop@lists.oasis-open.org Subject: RE: [wsrp-interop] Oracle producer expects URL-decoded navigation al state? I think we do agree that a producer must encode all values it places into URL templates and that it writes in wsrp-rewrite expressions. The question outstanding is whether the consumer or producer should decode all/some values. I believe we came down to consumer decodes at the last f2f (in the infamous "/" discussions). It's normal Web practice to encode query string values and have them decoded when they come back into the Web server (automatically). But it's not normal practice to pass URL encoded values as strings which also get XML encoded by SOAP. Sure, the producer can skip encoding/decoding if it knows that the value is safe, but the consumer would still need to do an encode in forwarding the value, so no free lunch. Values for wsrp-mode and wsrp-windowsState (placed on URls) are not opaque, so the protocol should say that they are to be encoded (if decoded by the producer) as producers don't know if they happen to be on a url or supplied by the consumer. [Even navigational and interaction state are not totally opaque in that these are xsd:string strings and get XML encoded by the protocol. If we used base64Binary I could see an opaque argument coming in...] Consumer decodes also seems less sensitive to errors in that producers can choose safe values (e.g. alphanumeric or binHex would be better in any case, making the consumer decode irrelevant) or the producer can check if a decode has been missed by the consumer (e.g. add a % char at end) or, e.g., producers can do complex double encoding. If we changed to producer decodes then we would need a list of fields at the protocol level that are to be transmitted in URL encoded form. This would need to be be added as an errata on the 1.0 spec. Staying with consumer/Web Server decodes just needs a prepared FAQ. regards, Andre -----Original Message----- From: Richard Jacob [mailto:richard.jacob@de.ibm.com] Sent: 21 July 2003 11:31 To: Andre Kramer Cc: wsrp-interop@lists.oasis-open.org Subject: RE: [wsrp-interop] Oracle producer expects URL-decoded navigation al state? well right, sometimes the Consumer might receive them still encoded. But shouldn't they be transparent to the consumer? If the producer chooses to store values which need to be encoded, it should also be responsible for decoding them. A producer might choose to have values in which do not need to be encoded so everything would work without the extra decoding step. I think the values should be completly transparent to the Consumer. In the spec we don't say a word about the Consumer needing to decode, so this interpretation may break interoperability. Mit freundlichen Gruessen / best regards, Richard Jacob ______________________________________________________ IBM Lab Boeblingen, Germany Dept.8288, WebSphere Portal Server Development Phone: ++49 7031 16-3469 - Fax: ++49 7031 16-4888 Email: mailto:richard.jacob@de.ibm.com |---------+----------------------------> | | Andre Kramer | | | <andre.kramer@eu.| | | citrix.com> | | | | | | 07/21/2003 12:13 | | | PM | |---------+----------------------------> > --------------------------------------------------------------------------------------------------------------------------------------------------| | | | To: wsrp-interop@lists.oasis-open.org | | cc: | | Subject: RE: [wsrp-interop] Oracle producer expects URL-decoded navigation al state? | > --------------------------------------------------------------------------------------------------------------------------------------------------| We, like Oracle, also decode and for a good reason: the Web server does the decode for us on the way in. regards, Andre -----Original Message----- From: Richard Jacob [mailto:richard.jacob@de.ibm.com] Sent: 21 July 2003 10:10 To: wsrp-interop@lists.oasis-open.org Subject: [wsrp-interop] Oracle producer expects URL-decoded navigational state? Hi, I noticed that it seems the Oracle producer expects URL-decoded parameter values like the navigationalState to be passed back. For example when clicking on the render URL "State1|State2" link in portlet E:4:default the navigationalState is navState%3D1 which is "navState=1" URL decoded. When we pass the still encoded value back, the portlet throws an OperationFaled fault. It works with the decoded value. My understanding is that the consumer should not be required to decode the parameter values before passing them to the producer, but to pass them "as-is", i.e. they should be transparent for the Consumer. The following are massage traces of getMarkup() when clicking on the above mentioned renderURL, one with encoded and one with decoded navState values: 1. decoded: POST /wsrp/jaxrpc/WSRPBaseService HTTP/1.0 Content-Type: text/xml; charset=utf-8 Accept: application/soap+xml, application/dime, multipart/related, text/* User-Agent: Axis/1.1 Host: localhost:8082 Cache-Control: no-cache Pragma: no-cache SOAPAction: "urn:oasis:names:tc:wsrp:v1:getMarkup" Content-Length: 1667 Cookie: JSESSIONID=82b5bea16ff84f6ba1c9f3c8986b8c51.rQjwaxqK-AXMmkbGngTxpQOUaN0KahD3lN4Oc2SSbMSLax8IahyL-x8Kn6bycgTAbhmRakbvbh4L-wOSa30K8Oz1iN8Ka2TRnk8MbN0IrlaIpR9vmQLz-AbJpgaMbx8LchyxhOaOgzXepR9OmkKxhOaOgzXepR9OmkKxn6jAmljGr5XDqQLvpAe_ <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <getMarkup xmlns="urn:oasis:names:tc:wsrp:v1:types"> <registrationContext> <registrationHandle>C:148.87.122.191:3c9557:f66626afe5: -7f24</registrationHandle> </registrationContext> <portletContext> <portletHandle>E:4:default</portletHandle> </portletContext> <runtimeContext> <userAuthentication>wsrp:none</userAuthentication> <portletInstanceKey>Oracle2_row_col1_p4</portletInstanceKey> <namespacePrefix>Pluto_Oracle2_row_col1_p4_</namespacePrefix> </runtimeContext> <userContext> <userContextKey>dummyUserContextKey</userContextKey> </userContext> <markupParams> <secureClientCommunication>false</secureClientCommunication> <locales>en</locales> <locales>de</locales> <mimeTypes>text/html</mimeTypes> <mode>wsrp:view</mode> <windowState>wsrp:normal</windowState> <clientData> <userAgent>IBM WSRP4J ProxyPortlet.0.042</userAgent> </clientData> <navigationalState>nav_state=1</navigationalState> <markupCharacterSets>UTF-8</markupCharacterSets> <validNewModes>wsrp:view</validNewModes> <validNewModes>wsrp:help</validNewModes> <validNewModes>wsrp:edit</validNewModes> <validNewWindowStates>wsrp:normal</validNewWindowStates> <validNewWindowStates>wsrp:maximized</validNewWindowStates> <validNewWindowStates>wsrp:minimized</validNewWindowStates> </markupParams> </getMarkup> </soapenv:Body> </soapenv:Envelope> Response: HTTP/1.1 200 OK Date: Mon, 21 Jul 2003 08:52:10 GMT Server: Oracle9iAS/9.0.2 Oracle HTTP Server Oracle9iAS-Web-Cache/Oracl Via: HTTP/1.1 ips-ehni-c.ehningen.de.ibm.com (IBM-PROXY-WTE), 1.1 JACOBTP Cache-Control: private SOAPAction: "" Content-Length: 2010 Content-Type: text/xml; charset="utf-8" Set-Cookie: JSESSIONID=82b5bea16ff84f6ba1c9f3c8986b8c51.rQjwaxqK-AXMmkbGngTxpQOUaN0KahD3lN4Oc2SSbMSLax8IahyL-x8Kn6bycgTAbhmRakbvbh4L-wOSa30K8Oz1iN8Ka2TRnk8MbN0IrlaIpR9vmQLz-AbJpgaMbx8LchyxhOaOgzXepR9OmkKxhOaOgzXepR9OmkKxn6jAmljGr5XDqQLvpAe_; Path=/wsrp X-Cache: MISS from JACOBTP Connection: close <?xml version="1.0" encoding="UTF-8"?> <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns0 ="urn:oasis:names:tc:wsrp:v1:types"><env:Body><ns0:getMarkupResponse><ns0:markupContext><ns0:useCachedMarkup>false</ns0:useCachedMarkup><ns0:mimeType>text/html</ns0:mimeType><ns0:markupString> lt;p class="portlet-msg-status">Current count = 0 - adjust counter: <a href=" wsrp_rewrite?wsrp-urlType=blockingAction&amp;wsrp-mode=wsrp%3Aview&amp;wsrp-windowState=wsrp%3Anormal&amp;wsrp-secureURL=false&amp;wsrp-navigationalState=nav_state%3D1&amp;wsrp-interactionState=adjust_value%3Dinc/wsrp_rewrite" gt;+</a> <a href ="wsrp_rewrite?wsrp-urlType=blockingAction&amp;wsrp-mode=wsrp%3Aview&amp;wsrp-windowState=wsrp%3Anormal&amp;wsrp-secureURL=false&amp;wsrp-navigationalState=nav_state%3D1&amp;wsrp-interactionState=adjust_value%3Ddec/wsrp_rewrite" gt;-</a></p> <p class="portlet-msg-status">In navigational state 1 - change state: [ <a href=" wsrp_rewrite?wsrp-urlType=render&amp;wsrp-mode=wsrp%3Aview&amp;wsrp-windowState=wsrp%3Anormal&amp;wsrp-secureURL=false&amp;wsrp-navigationalState=nav_state%3D1/wsrp_rewrite" gt;State 1</a> | <a href ="wsrp_rewrite?wsrp-urlType=render&amp;wsrp-mode=wsrp%3Aview&amp;wsrp-windowState=wsrp%3Anormal&amp;wsrp-secureURL=false&amp;wsrp-navigationalState=nav_state%3D2/wsrp_rewrite" gt;State 2</a> ]</p> <p class="portlet-msg-status">Last generated: July 21, 2003 2:52:09 AM MDT</p> </ns0:markupString><ns0:locale>EN</ns0:locale><ns0:requiresUrlRewriting>true</ns0:requiresUrlRewriting><ns0:cacheControl><ns0:expires>60</ns0:expires><ns0:userScope>wsrp:perUser</ns0:userScope></ns0:cacheControl><ns0:preferredTitle>Cache Test Portlet</ns0:preferredTitle></ns0:markupContext></ns0:getMarkupResponse></env:Body></env:Envelope> 2. still encoded: POST /wsrp/jaxrpc/WSRPBaseService HTTP/1.0 Content-Type: text/xml; charset=utf-8 Accept: application/soap+xml, application/dime, multipart/related, text/* User-Agent: Axis/1.1 Host: localhost:8082 Cache-Control: no-cache Pragma: no-cache SOAPAction: "urn:oasis:names:tc:wsrp:v1:getMarkup" Content-Length: 2040 Cookie: JSESSIONID=6d33f8cb0b9f46748d8881a90ab3707e.rQjwaxqK-AXMmkbGngTxpQOUaN0KahD3lN4Oc2SSbMSLax8IahyL-x8Kn6bycgTAbhmRakbvbh4L-wOSa30K8Oz1iN8Ka2TRnk8MbN0IrlaIpR9vmQLz-AbJpgaMbx8LchyxhOaOgzXepR9OmkKxhOaOgzXepR9OmkKxn6jAmljGr5XDqQLvpAe_ <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <getMarkup xmlns="urn:oasis:names:tc:wsrp:v1:types"> <registrationContext> <registrationHandle>C:148.87.122.191:3c9557:f66626afe5: -7f1a</registrationHandle> </registrationContext> <portletContext> <portletHandle>E:4:default</portletHandle> </portletContext> <runtimeContext> <userAuthentication>wsrp:none</userAuthentication> <portletInstanceKey>9.152.199.249_1058777243647_5</portletInstanceKey> <namespacePrefix></namespacePrefix> </runtimeContext> <userContext> <userContextKey>Erebus</userContextKey> <profile> <name> <given>John</given> <family>Doe</family> <middle>Joe</middle> <nickname>Jo</nickname> </name> <bdate>1970-01-31T23:00:00.000Z</bdate> <gender>mmh</gender> <employerInfo/> <homeInfo/> <businessInfo/> </profile> </userContext> <markupParams> <secureClientCommunication>false</secureClientCommunication> <locales>en</locales> <locales>de</locales> <mimeTypes>text/html</mimeTypes> <mode>wsrp:view</mode> <windowState>wsrp:normal</windowState> <clientData> <userAgent>WSRP4J Swing Consumer V. 0.3</userAgent> </clientData> <navigationalState>nav_state%3D1</navigationalState> <markupCharacterSets>UTF-8</markupCharacterSets> <validNewModes>wsrp:view</validNewModes> <validNewModes>wsrp:help</validNewModes> <validNewModes>wsrp:edit</validNewModes> <validNewModes>wsrp:preview</validNewModes> <validNewWindowStates>wsrp:normal</validNewWindowStates> <validNewWindowStates>wsrp:maximized</validNewWindowStates> <validNewWindowStates>wsrp:minimized</validNewWindowStates> <validNewWindowStates>wsrp:solo</validNewWindowStates> </markupParams> </getMarkup> </soapenv:Body> </soapenv:Envelope> HTTP/1.1 200 OK Date: Mon, 21 Jul 2003 08:48:00 GMT Server: Oracle9iAS/9.0.2 Oracle HTTP Server Oracle9iAS-Web-Cache/Oracl Via: HTTP/1.1 ips-ehni-c.ehningen.de.ibm.com (IBM-PROXY-WTE), 1.1 JACOBTP Cache-Control: private SOAPAction: "" Content-Length: 464 Content-Type: text/xml; charset="utf-8" Set-Cookie: JSESSIONID=6d33f8cb0b9f46748d8881a90ab3707e.rQjwaxqK-AXMmkbGngTxpQOUaN0KahD3lN4Oc2SSbMSLax8IahyL-x8Kn6bycgTAbhmRakbvbh4L-wOSa30K8Oz1iN8Ka2TRnk8MbN0IrlaIpR9vmQLz-AbJpgaMbx8LchyxhOaOgzXepR9OmkKxhOaOgzXepR9OmkKxn6jAmljGr5XDqQLvpAe_; Path=/wsrp X-Cache: MISS from JACOBTP Connection: close <?xml version="1.0" encoding="UTF-8"?> <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns0 ="urn:oasis:names:tc:wsrp:v1:types"><env:Body><env:Fault xsi:type ="env:Fault"><faultcode>env:Server</faultcode><faultstring>oracle.webdb.wsrp.OperationFailed</faultstring><detail><ns0:OperationFailed/></detail></env:Fault></env:Body></env:Envelope> Mit freundlichen Gruessen / best regards, Richard Jacob ______________________________________________________ IBM Lab Boeblingen, Germany Dept.8288, WebSphere Portal Server Development Phone: ++49 7031 16-3469 - Fax: ++49 7031 16-4888 Email: mailto:richard.jacob@de.ibm.com You may leave a Technical Committee at any time by visiting http://www.oasis-open.org/apps/org/workgroup/wsrp-interop/members/leave_workgroup.php
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]