home *** CD-ROM | disk | FTP | other *** search
- <?xml version="1.0" encoding="UTF-8"?>
- <!--
- Copyright 1999-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
- <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.0//EN" "document-v10.dtd">
- <document>
- <header>
- <title>Portal Syndication with Web Services and Cocoon</title>
- <version>1.0</version>
- <type>Technical document</type>
- <authors>
- <person name="Ivelin Ivanov" email="ivelin@apache.org"/>
- </authors>
- <abstract>This document describes the Web Service ProxyGenerator of Cocoon.</abstract>
- </header>
- <body>
- <s1 title="What Is Web Syndication?">
- <p>Web Site Syndication has gained popularity as more and more web sites cross reference each
- other, not only by a single hyperlink, but also by embedding parts of their content. The
- idea was pioneered by Netscape with their Rich Site Summary (RSS)
- (<link href="http://www.oasis-open.org/cover/rss.html">http://www.oasis-open.org/cover/rss.html</link>)
- XML format. RSS was developed in early 1999 to populate Netscape's My Netscape portal with
- external newsfeeds ("channels"). Since then RSS has taken on a life of its own and now
- thousands of Web sites use RSS as a "what's new" mechanism to drive traffic their way.
- </p>
- <p>The current RSS 1.0 standard is an application of Resource Description Framework (RDF)
- (<link href="http://www.w3.org/TR/rdf-schema/">http://www.w3.org/TR/rdf-schema/</link>). RDF
- is a framework for describing and interchanging metadata. The RDF framework is extensible
- and allows adding new types of entities. It also gives meaning to resources to enable
- automated processing of Web resources.
- </p>
- <p>RSS is unarguably an example of an organically grown and widely accepted standard. For long
- it was not endorsed by any of the popular standards committees. Even so it quickly became
- popular and found a large number of creative uses. Lately though it has reached its limits.
- There is a demand for more advanced portal syndication which RSS cannot satisfy.
- </p>
- </s1>
-
- <s1 title="Going beyond RSS with Web Services">
- <p>Latest generation web portals demand more than simply posting cross linked news stories
- from RSS. Embedding and personalizing rich content and behavior from remote portals is
- becoming necessity. Limited success has been achieved through complex and sophisticated
- backend integration via proprietary or Web Services compliant protocols. Recognizing the
- growing demand, influential organizations have attempted to develop new languages such as:
- </p>
-
- <s2 title="Web Services Experience Language (WSXL)">
- <p>
- (<link href="http://www.webservices.org/index.php/article/articleview/345/">http://www.webservices.org/index.php/article/articleview/345/</link>)
- </p>
- <p>
- <em>"WSXL is a Web services centric component model for interactive Web applications. WSXL
- is designed to achieve two main goals: enable businesses to distribute Web applications
- through multiple revenue channels and enable new services or applications to be created
- by leveraging existing applications across the Web."
- </em>
- </p>
- </s2>
-
- <s2 title="Web Services Inspection Language (WSIL)">
- <p>
- (<link href="http://www.webservices.org/index.php/article/articleview/85/">http://www.webservices.org/index.php/article/articleview/85/</link>)
- </p>
- <p>
- <em>"The specification allows a Web services provider to publish a WS-Inspection (WSIL)
- document which lists the services on offer and their corresponding WSDL (Web services
- description language) files. The convention is that the WSIL document should be called
- "inspection.wsil" and be located at a common entry point to the web site. This paves the
- way for future Web services "crawlers" to locate and parse WSIL documents for Web
- service search engines."
- </em>
- </p>
- </s2>
-
- <s2 title="Web Services for Remote Portals (WSRP)">
- <p>
- (<link href="http://www.oasis-open.org/committees/wsrp/">http://www.oasis-open.org/committees/wsrp/</link>)
- </p>
- <p>
- <em>"Defining an XML and Web services standard that will allow the plug-n-play of visual,
- user-facing Web services with portals or other intermediary Web applications"
- </em>
- </p>
- </s2>
-
- <s2 title="Web Services for Interactive Applications">
- <p>
- (<link href="http://www.oasis-open.org/committees/wsia/">http://www.oasis-open.org/committees/wsia/</link>)
- </p>
- <p>
- <em>"Create an XML and web services centric framework for interactive web applications.
- The designs must achieve two main goals: enable businesses to distribute web
- applications through multiple revenue channels, and enable new services or applications
- to be created by leveraging existing applications across the Web."
- </em>
- </p>
- </s2>
-
- <p>While these efforts are certainly worthwhile and promising, it will most likely take years
- before they pass the filters of real life use before they can claim widespread adoption. All
- of them ask for a thick infrastructure layer to support implementations. While possible, it
- is unlikely that mainstream deployment will be achieved instantly.
- </p>
- <p>Not all is lost though. Fortunately, there is way to satisfy a large portion of the
- syndication requirements by applying already established technologies and tools. We will
- illustrate the architecture of a possible solution using an open source framework for XML
- Publishing - Apache Cocoon.
- </p>
- </s1>
-
- <s1 title="Apache Cocoon">
- <p>
- (<link href="http://cocoon.apache.org/index.html">http://cocoon.apache.org/index.html</link>)
- </p>
- <p>
- <em>"Apache Cocoon is an XML publishing framework that raises the usage of XML and XSLT
- technologies for server applications to a new level. Designed for performance and
- scalability around pipelined SAX processing, Cocoon offers a flexible environment based
- on a separation of concerns between content, logic and style. To top this all off,
- Cocoon's centralized configuration system and sophisticated caching help you to create,
- deploy and maintain rock-solid XML server applications".
- </em>
- </p>
- <p>First, let's describe a typical use case scenario: User logs in to a familiar portal and
- happily surfs about. At some point the user clicks on a link which leads to a strange page.
- It has the portal logo, even shows the same login id but still looks very different and
- unfriendly ... After some time and frustration the user gets used to switching back and
- forth between the two faces of the portal ... while looking for another provider which
- offers both services in a coherent graphical interface.
- </p>
- <p>For those who have never had similar experience, we will give a popular example. Yahoo! Autos
- (<link href="http://autos.yahoo.com/finance.html?refsrc=autos/insurance">http://autos.yahoo.com/finance.html?refsrc=autos/insurance</link>)
- offers an easy to use interactive catalog of cars. However when it comes to insuring an
- automobile, applying for a loan or buying a car, the web site hyperlinks to a co-branded
- page of another company. For example Lending Tree
- (<link href="https://www.lendingtree.com/newauto/secure/ctl_borrower.asp?page=loan_selection&verb=continue&O_loan_type=LOAN_TYPE_AUTO&bp=yahooautos&source=40050&alliance=true&SITEID=&templxlname=&templxssn1=&templxssn2=&templxssn3=">https://www.lendingtree.com/newauto/.....</link> )
- will show Yahoo! Autos logo at the top of the screen, however the rest of the page looks
- very different than any other Yahoo! page. All the personalization spoils that a Yahoo! user
- enjoys are lost as soon as the application for a loan begins. Not only the colors and layout
- are different. A login session with Yahoo! does not carry over to Lending Tree. On top of
- that a pop-up window appears when switching between the two sites, which reads "You are
- about to view pages over a secure connection ...". When added up these "negligible"
- inadequacies, lead to an overall poor experience, which is certainly not the original
- intent of the Yahoo! content producers.
- </p>
- <p>Now as we have an idea of how things are not supposed to work, we will show that
- outsourcing interactive components to a third party site, while preserving the look &
- feel of the original portal is still possible when done right. As we mentioned Cocoon offers
- a solution. Since Cocoon is a very sophisticated framework, an indepth analysis of its
- features is beyond the scope of this text to cover.
- </p>
- </s1>
-
- <s1 title="Web Services Proxy to the rescue">
- <p>The latest version of Cocoon is 2.1 and it has a new Web Service Proxy component. It is
- this component which we shall focus on for the reminder of the text. To follow the rest of
- the article, it will be useful (but not essential) to have a basic knowledge of Cocoon 2.
- </p>
- <p>Combined with the XMLForm (which is not part of Cocoon anymore)
- component of Cocoon 2 and XSLT, the Web Service Proxy component allows vendors to share
- interactive content with little effort. The Web Service Proxy takes advantage of the fact
- that a Cocoon web application produces XML content, which is later translated into multiple
- presentation formats, like HTML or WML. Once the proxy is plugged in the Cocoon sitemap, it
- transparently pipes browser requests to a remote web application and returns the response
- back to the sitemap for local styling. Receiving a client independent XML format, allows the
- local site to pull content and style it with XSLT with the desired Look & Feel.
- </p>
- <p>
- <strong>
- Q. Ok, styling presentation is easy to understand, but how is a form submitted to the original site?
- </strong>
- </p>
- <p>The XMLForm component is the answer. It uses W3C XForms included in the XML content which
- allows the end user to directly interact with the remote server through the embedding site.
- The form markup in the XML content of an embedded page uses relative URL address for the
- target action, when the end user submits, the form data is sent to the containing site,
- which captures the form data and the relative URL. The Web Service Proxy then takes this
- information and re-submits it to the original site. It then reads the XML response and makes
- it available to the sitemap for styling again.
- </p>
- <p>
- <strong>Q. Hmm ... a typical web application maintains a user session while navigating.
- How is the containing site propagating the end user session to the embedded site?
- </strong>
- </p>
- <p>The answer is simple. The Web Service Proxy simply hooks to the end user session and
- automatically starts its own session with the remote site. If the remote site requires
- authentication, then the developer of the local web site has to pass the user credentials
- as parameters to the WebServiceProxyGenerator.
- </p>
- <p>
- <strong>Q. What transport protocols are supported?</strong>
- </p>
- <p>HTTP 1.0, HTTP 1.1, HTTPS.</p>
- <p>Below we will illustrate the architecture of the solution with some example code and
- figures.
- </p>
- <figure src="images/wsproxy_Proxies.png" alt="Figure 1 - Traditional Http Proxy vs Cocoon Web Service Proxy"/>
- <p>
- <em>Figure 1 - Architecture of the Web Service Proxy Solution. As opposed to a traditional
- proxy server, the Web Services Proxy captures user input and allows the web site to remain
- coherent even when the functionality for some of its components is delivered remotely.
- </em>
- </p>
- <figure src="images/wsproxy_CompositePage.png" alt="Figure 2 - Illustration of the data flow for a composite page"/>
- <p>
- <em>Figure 2 - Illustration of the data flow for a composite page. Some of the content is
- locally constructed, the rest is obtained remotely. Finally the same styling is applied
- and the user facing page appears consistent.
- </em>
- </p>
- <p>Now we will show a snippet of the sitemap which employs the Web Service Proxy. Notice its
- brevity! The Web Service Proxy completely handles the content and navigation logic between
- the two portals. Only stylesheets are additionally required to translate the remotely
- retrieved documents into a user friendly format.
- </p>
- <source><![CDATA[
- <?xml version="1.0"?>
- <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
-
- <!-- =========================== Components ================== -->
- <map:components>
- <map:generators default="file">
- <map:generator name="wsproxy" logger="sitemap.generator.wsproxy"
- src="org.apache.cocoon.generation.WebServiceProxyGenerator"/>
- </map:generators>
- </map:components>
-
- <!-- =========================== Pipelines =================== -->
- <map:pipelines>
- <map:pipeline>
- <!-- Interactive Web Application Syndication -->
- <map:match pattern="*">
- <map:generate type="wsproxy" label="xml"
- src="http://{request:serverName}:{request:serverPort}{request:contextPath}/samples/xmlform/wizard?cocoon-view=xml"/>
- <map:transform src="stylesheets/newWizard2html.xsl"/>
- <map:transform src="context://samples/stylesheets/xmlform/xmlform2html.xsl"/>
- <map:serialize type="html"/>
- </map:match>
- </map:pipeline>
- </map:pipelines>
- </map:sitemap>
- ]]></source>
-
- <figure src="images/wsproxy_Sequence.png" alt="Figure 3 - sequence diagram"/>
- <p>
- <em>Figure 3 - Above is a sequence diagram outlining the interaction between the key
- participants in a syndication session.
- </em>
- </p>
- <figure src="images/wsproxy_Screenshot1.png" alt="screen shot 1"/>
- <p>
- <em>Figure 4 - Sample screenshot from a remotely enabled application as it appears
- standalone.
- </em>
- </p>
- <figure src="images/wsproxy_Screenshot2.png" alt="screen shot 2"/>
- <p>
- <em>Figure 5 - Sample screenshot from the same application embedded in another web
- application.
- </em>
- </p>
-
- <p>The content of the original XML page behind these two screenshot follows:</p>
- <source><![CDATA[
- <?xml version="1.0"?>
- <document xmlns:xf="http://apache.org/cocoon/xmlform/1.0">
- <xf:form id="form-feedback" view="userIdentity" action="wizard" method="GET">
- <xf:caption>Personal Information</xf:caption>
- <error>
- <xf:violations class="error"/>
- </error>
- <xf:textbox ref="firstName">
- <xf:caption>First Name</xf:caption>
- <xf:violations class="error"/>
- </xf:textbox>
- ...
- <xf:selectMany ref="role" selectUIType="listbox">
- <xf:caption>Professional roles</xf:caption>
- <xf:item>
- <xf:caption>Geek</xf:caption>
- <xf:value>Geek</xf:value>
- </xf:item>
- <xf:item>
- <xf:caption>Hacker</xf:caption>
- <xf:value>Hacker</xf:value>
- </xf:item>
- ...
- </xf:selectMany>
- ...
- <!-- hidden model attribute -->
- <xf:hidden ref="hidden">
- <xf:value>true</xf:value>
- </xf:hidden>
- ...
- <xf:submit id="next" class="button">
- <xf:caption>Next</xf:caption>
- </xf:submit>
- </xf:form>
-
- <xf:output ref="count" id="show_count" form="form-feedback" class="info">
- <xf:caption>Visits Count</xf:caption>
- </xf:output>
- </document>
- ]]></source>
-
- <p>The listing above contains markup in the XMLForm namespace. It is a presentation
- independent way to specify input controls. Being XForms compliant it is easy to learn and
- use. The XSLT stylesheets used to convert the XML above are very simple and will not be
- listed here. They can found in the Cocoon 2.1 distribution.
- </p>
- </s1>
-
- <s1 title="Conclusion">
- <p>The Web Service Proxy component is tightly integrated with the Cocoon framework and is
- particularly convenient to use in combination with XMLForm to enable syndication of website
- functionality. With the presented sample, we only scratched the service of the possible
- applications. It is easy to see though for a creative mind how it can be extended in
- multiple directions. Although the solution we offered is conveniently applied with Cocoon,
- the concepts are generally applicable outside the framework as well. Exposing a Web
- Application functionality via XML is not just a "neat" feature any more. It opens the gates
- to a constellation of opportunities, not possible with the classical Model-2 approach where
- the business logic is directly tied to a graphical output like HTML.
- </p>
-
- <s2 title="Have more questions?">
- <p>Look at the online demo available in the Cocoon distribution in the samples:
- <code>http://{host}:{port}/{contextPath}/samples/proxy/</code>.
- </p>
- <p>Then study the source code and if you still have questions, join the cocoon users email
- list and ask. If you have ideas for improvement then you are more than welcome to discuss
- it on the cocoon development email list and eventually submit a patch through the Apache
- bug tracking system.
- </p>
- </s2>
- </s1>
- </body>
- </document>
-
-