Oracle9iAS Portal Developer Kit
How to Build a URL-Based Portlet that Uses XML Filtering

PDK Release 2 (9.0.2 and later)

In the article How to Build a URL-Based Portlet, you learned how to create a portlet that displayed the content of a URL-based application. The example used in that article was Google.com. With the PDK, you can also easily create URL-based portlets that filter and manipulate URL content before displaying it. Two types of filters are available:

- HtmlFilter see How to Build a URL-Based Portlet with HTML Filtering
- XmlFilter deals with applications that use XML content

This article describes how to build a URL-based portlet that uses XML filtering. To make things easier, it uses the existing Google.com portlet framework and simply replaces the provider.xml file with an appropriate XML provider definition for creating an XML based portlet. It uses a sample XML file which is contained in the article below. It shows how you can transform this XML content into HTML and then render that content inside the portlet.

### ASSUMPTIONS

1. You have successfully installed the PDK framework by following the article Installing the PDK Framework and Samples.
2. You understand the steps required to display a URL-based portlet on a portal page. Refer to the article Installing the URL-Based PDK Samples.

### THE SAMPLE XML/XSL FILES

Before building your XML based portlet, you will need an XML feed or XML file. Below is a sample file you can use. Copy the text and then save it as sample.xml.

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <stock_quotes>
       <stock_quote>
          <symbol>ORCL</symbol>
          <date>11/19/2001</date>
          <time>4:01PM</time>
          <ask>14.87</ask>
          <open>14.82</open>
          <dayhigh>15.05</dayhigh>
          <daylow>14.50</daylow>
          <change>+0.32</change>
          <volume>30458900</volume>
       </stock_quote>
       <stock_quote>
          <symbol>CSCO</symbol>
          <date>11/19/2001</date>
          <time>4:01PM</time>
          <ask>20.72</ask>
          <open>20.14</open>
          <dayhigh>20.72</dayhigh>
          <daylow>20.06</daylow>
          <change>0.66</change>
          <volume>64166100</volume>
       </stock_quote>
       <stock_quote>
          <symbol>MSFT</symbol>
          <date>11/19/2001</date>
          <time>4:01PM</time>
          <ask>66.54</ask>
          <open>66.25</open>
          <dayhigh>66.97</dayhigh>
          <daylow>66.7</daylow>
          <change>0.27</change>
          <volume>28003800</volume>
       </stock_quote>
    </stock_quotes>

You will also need an XSL file which your portlet will use to display the XML content. You may use the sample XSL file below. It should be saved as sample.xsl.

Note: In your XSL file, you must specify the version in the <xsl:stylesheet> tag; for example <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <?xml version='1.0' encoding='utf-8' ?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
       <xsl:template match="/">
          <center>
             <h1>Quotes:</h1>
             <table border="1" cellspacing="0" cellpadding="3">
                <tr bgcolor="dcdcdc">
                   <th>Symbol</th>
                   <th colspan="2">Date&amp;Time</th>
                   <th>Ask</th>
                   <th>Open</th>
                   <th>Day High</th>
                   <th>Day Low</th>
                   <th>Volume</th>
                </tr>
                <xsl:for-each select="stock_quotes/stock_quote">
                   <tr>
                      <td>
                         <B>
                            <font size="-1">
                               <xsl:value-of select="symbol"/>
                            </font>
                         </B>
                      </td>
                      <td>
                         <font size="-1">
                            <xsl:value-of select="date"/>
                         </font>
                      </td>
                      <td>
                         <font size="-1">
                            <xsl:value-of select="time"/>
                         </font>
                      </td>
                      <td>
                         <font size="-1">
                            <xsl:value-of select="ask"/>
                         </font>
                      </td>
                      <td>
                         <font size="-1">
                            <xsl:value-of select="open"/>
                         </font>
                      </td>
                      <td>
                         <font size="-1">
                            <xsl:value-of select="dayhigh"/>
                         </font>
                      </td>
                      <td>
                         <font size="-1">
                            <xsl:value-of select="daylow"/>
                         </font>
                      </td>
                      <td>
                         <font size="-1">
                            <xsl:value-of select="volume"/>
                         </font>
                      </td>
                   </tr>
                </xsl:for-each>
             </table>
          </center>
       </xsl:template>
    </xsl:stylesheet>

### CREATING AN XML PROVIDER DEFINITION

Using a text editor, create an XML file for your portlet provider. Use the stylesheet tag to apply the stylesheet you just created. You may use the sample xml file below (you must change the httpProxyHost and httpProxyPort values to point to your own proxy server and port). Please refer to the article Understanding provider.xml for URL-Based Portlets for an explanation of the required XML tags and their functions.

After you have created the file, save it on your file system as "provider.xml".

>     <?xml version = '1.0' encoding = 'UTF-8'?>
>     <?providerDefinition version="3.1"?>
>        <provider class="oracle.portal.provider.v2.http.URLProviderDefinition">
>        <providerInstanceClass>oracle.portal.provider.v2.http.URLProviderInstance</providerInstanceClass>
>        <session>true</session>
>        <proxyInfo class="oracle.portal.provider.v2.ProxyInformation">
>           <httpProxyHost>www-proxy.us.oracle.com</httpProxyHost>
>           <httpProxyPort>80</httpProxyPort>
>        </proxyInfo>
>        <portlet class="oracle.portal.provider.v2.http.URLPortletDefinition">
>           <id>1</id>
>           <name>XML Portlet</name>
>           <title>XML Portlet</title>
>           <description>Display XML in a portlet.</description>
>           <timeout>100</timeout>
>           <timeoutMessage>Timed out waiting for XML Portlet.</timeoutMessage>
>           <acceptContentType>text/html</acceptContentType>
>           <showEdit>false</showEdit>
>           <showEditToPublic>false</showEditToPublic>
>           <showEditDefault>false</showEditDefault>
>           <showPreview>false</showPreview>
>           <showDetails>false</showDetails>
>           <hasHelp>false</hasHelp>
>           <hasAbout>false</hasAbout>
>           <renderer class="oracle.portal.provider.v2.render.RenderManager">
>              <contentType>text/html</contentType>
>              <showPage class="oracle.portal.provider.v2.render.http.URLRenderer">
>                 <contentType>text/html</contentType>
>                 <charSet>ISO-8859-1</charSet>
>                 <pageUrl>http://myserver.com/xml/sample.xml</pageUrl>
>                 <filter class="oracle.portal.provider.v2.render.XmlFilter">
>                    <stylesheet>http://myserver.com/xml/sample.xsl</stylesheet>
>                    <urlContentType>text/xml</urlContentType>
>                 </filter>
>              </showPage>
>           </renderer>
>        </portlet>
>     </provider>

### DEPLOYING YOUR PROVIDER ON OC4J

To configure and deploy your provider on OC4J, please see the section called "Deploying Your Provider on OC4J" in the article, How to Build a URL-Based Portlet.

At this point, you are ready to register your provider and then add your new portlet to a page. Please follow the appropriate steps for doing this as described in the Installing the URL-Based Portlet Samples article.

Now that you have successfully created URL-based portlet that uses XML filtering, please look for other portlet development articles that describe how to add extra features to your portlet, including single sign-on to external URL-based applications, HTML filtering and more.

Here are some reference articles to help you better understand the architecture and technical details of URL-based portlets:

> - A Primer on URL-Based Portlets
> - Understanding the PDK Runtime for URL-Based Portlets
> - Understanding the provider.xml for URL-Based Portlets

Revision History:

- January 2002