Hello community, <br /><br />i want to deploy my own rss portlet into liferay but i get the following msg instead of my portlet "RssPortlet is temporarily unavailable." actually i don't know whats wrong. can anyone give me some additional hints? i tryed to integrate the portlet via your doku "hot deployment" i 've used the ant task deply in the folder /myPortlets which i created in the root folder of liferay in one layer with the folders lib, client, bin, server.<br /><br />best regards,<br /><br />ben<br /><br />war-structure:<br /><br />/WEB-INF<br /> /tlds/taglib.tld<br /> /tld/portlet.tld<br /> /lib/xalan-2.4.1.jar<br /> /rss4j-0.9.2.jar<br /> /conf/html.xsl<br /> /Rss10.xsl<br /> /Rss20.xml<br /> /classes/....../RssPortlet.class<br /> /portlet.xml<br /> /web.xml<br />/pics<br />/META-INF<br />/jsp<br />/data<br /><br /><br /><br />portlet.xml<br /><br /><?xml version="1.0" encoding="UTF-8"?><br /><portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" <br /> version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <br /> xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd<br /><a href="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd">" target="_blank">http://java.sun.com/xml/ns/portlet/portlet...0.xsd"></a><br /> <portlet><br /> <portlet-name>RssPortlet</portlet-name><br /> <portlet-class>de.oio.portlets.RssPortlet</portlet-class><br /> <!-- a xsl file for the rss version 1.0 --><br /> <init-param><br /> <name>RSS10_XSL</name><br /> <value>/WEB-INF/conf/Rss10.xsl</value><br /> </init-param><br /> <!-- yet another xsl file for the rss version 2.0 --><br /> <init-param><br /> <name>RSS20_XSL</name><br /> <value>/WEB-INF/conf/Rss20.xsl</value><br /> </init-param><br /> <!-- starting url for reading rss --><br /> <init-param><br /> <name>url</name><br /> <value>http://www.oio.de/xml/feeds/oio-rss.xml</value><br /> </init-param><br /> <expiration-cache>30</expiration-cache><br /> <supports><br /> <mime-type>text/html</mime-type><br /> <portlet-mode>edit</portlet-mode><br /> <portlet-mode>help</portlet-mode><br /> </supports><br /> <supported-locale>de-DE</supported-locale><br /> <portlet-info><br /> <title>RssPortlet</title><br /> <short-title>RSS</short-title><br /> <keywords>RSS</keywords><br /> </portlet-info><br /> <portlet-preferences><br /> <preference><br /> <name>RssXml</name><br /> <value>http://www.oio.de/xml/feeds/oio-rss.xml</value><br /> <value>http://www.gnupg.org/news.en.rss</value><br /> <value>http://developers.sun.com/rss/sdn.xml</value><br /> <value><br /> <a href="http://www.theserverside.com/rss/theserverside-0.9.rdf</value>" target="_blank">http://www.theserverside.com/rss/theserver...f</value></a><br /> <value>http://rss.com.com/2547-12-0-20.xml</value><br /> <value><br /> <a href="http://headlines.internet.com/internetnews/top-news/news.rss</value>" target="_blank">http://headlines.internet.com/internetnews...s</value></a><br /> <value>http://www.sciencedaily.com/newsfeed.xml</value><br /> <value>http://www.heise.de/newsticker/heise.rdf</value><br /> <value><br /> <a href="http://www.spiegel.de/schlagzeilen/rss/0,5291,,00.xml</value>" target="_blank">http://www.spiegel.de/schlagzeilen/rss/0,5...l</value></a><br /> <value>http://www.javamagazin.de/rss/?version=2.0</value><br /> </preference><br /> </portlet-preferences><br /> </portlet><br /></portlet-app><br /><br />web.xml<br /><br /><?xml version="1.0" encoding="UTF-8" ?> <br /> <!DOCTYPE web-app (View Source for full doctype...)> <br />- <web-app><br /> <display-name>RssPortlet</display-name> <br /> </web-app><br /><br />class <br /><br />package de.oio.portlets;<br /><br />import java.io.IOException;<br />import java.io.InputStream;<br />import java.io.PrintWriter;<br />import java.net.MalformedURLException;<br />import java.net.URL;<br />import java.util.Arrays;<br />import java.util.TreeSet;<br /><br />import javax.portlet.ActionRequest;<br />import javax.portlet.ActionResponse;<br />import javax.portlet.GenericPortlet;<br />import javax.portlet.PortletException;<br />import javax.portlet.PortletMode;<br />import javax.portlet.PortletPreferences;<br />import javax.portlet.PortletSecurityException;<br />import javax.portlet.PortletURL;<br /><br />import javax.portlet.RenderRequest;<br />import javax.portlet.RenderResponse;<br />import javax.portlet.UnavailableException;<br />import javax.xml.parsers.DocumentBuilder;<br />import javax.xml.parsers.DocumentBuilderFactory;<br />import javax.xml.parsers.ParserConfigurationException;<br />import javax.xml.transform.Source;<br />import javax.xml.transform.Templates;<br />import javax.xml.transform.Transformer;<br />import javax.xml.transform.TransformerConfigurationException;<br />import javax.xml.transform.TransformerException;<br />import javax.xml.transform.TransformerFactory;<br />import javax.xml.transform.dom.DOMSource;<br />import javax.xml.transform.stream.StreamResult;<br />import javax.xml.transform.stream.StreamSource;<br /><br />import org.w3c.dom.Document;<br />import org.w3c.dom.Element;<br />import org.xml.sax.SAXException;<br /><br />/**<br /> * <br /> * <br /> * @author Orientation in Objects<br /> * <br /> * <br /> * @version 1.0 <br /> *<br /> * <br /> */<br /><br />public class RssPortlet extends GenericPortlet {<br /><br /> /* content type? */<br /> private static final String CONTENT_TYPE = "text/html;charset=UTF-8";<br /><br /> /* Rss preferences string */<br /> private static final String RSS_XML_PREFS = "RssXml";<br /><br /> /* Rss preferences default */<br /> private static final String[] RSS_XML_DEFAULT = new String[] { "http://www.oio.de/xml/feeds/oio-rss.xml" };<br /><br /> /* the compiled xsl for the version 1.0 */<br /> private Templates template10;<br /><br /> /* the compiled xsl for the version 2.0 */<br /> private Templates template20;<br /><br /> /**<br /> * the init method compiling the xsl and put the xsl in the application<br /> * scope<br /> */<br /> public void init() {<br /> try {<br /> String rss10 = this.getInitParameter("RSS10_XSL");<br /> String rss20 = this.getInitParameter("RSS20_XSL");<br /> this.template10 = this.getTemplateFromFile(rss10);<br /> this.template20 = this.getTemplateFromFile(rss20);<br /> } catch (Exception e) {<br /> e.printStackTrace();<br /> }<br /> }<br /><br /> /**<br /> * the processAction method reacts on a portlet action<br /> * <br /> */<br /> public void processAction(ActionRequest request, ActionResponse response)<br /> throws UnavailableException, PortletSecurityException, PortletException, IOException {<br /><br /> String errorMessage = null;<br /> try {<br /> checkPreferences(request);<br /> } catch (Exception e) {<br /> throw new PortletException(e);<br /> }<br /><br /> String url = request.getParameter("inputXml");<br /><br /> if ((url != null) && url.startsWith("http")) {<br /> try {<br /> new URL(url).openStream();<br /> PortletPreferences prefs = request.getPreferences();<br /> TreeSet existingPrefs = new TreeSet(Arrays.asList(prefs.getValues(RSS_XML_PREFS,<br /> RSS_XML_DEFAULT)));<br /> existingPrefs.add(url);<br /> prefs.setValues(RSS_XML_PREFS, (String[]) existingPrefs.toArray(new String[0]));<br /> prefs.store();<br /><br /> } catch (Exception e) {<br /> errorMessage = e.getMessage();<br /> }<br /><br /> response.setRenderParameter("selectXml", url);<br /> response.setRenderParameter("inputXml", url);<br /> response.setPortletMode(PortletMode.VIEW);<br /><br /> if (null != errorMessage) {<br /> response.setRenderParameter("errorMessage", errorMessage);<br /> }<br /><br /> }<br /><br /> String selectXml = request.getParameter("selectXml");<br /><br /> if (null != selectXml) {<br /> response.setRenderParameter("selectXml", selectXml);<br /> }<br /><br /> }<br /><br /><br /> private void checkPreferences(ActionRequest request) throws Exception {<br /><br /> String[] checkPrefs = request.getParameterValues("check");<br /> if (checkPrefs != null) {<br /> PortletPreferences prefs = request.getPreferences();<br /> TreeSet prefTreeSet = new TreeSet(Arrays.asList(checkPrefs));<br /> prefs.setValues(RSS_XML_PREFS, (String[]) prefTreeSet.toArray(new String[0]));<br /> prefs.store();<br /> }<br /> }<br /> <br /> /**<br /> * Allows the user to add more rss feeds, if edit-mode is supported<br /> * <br /> * @param request<br /> * the current action request<br /> * @throws Exception<br /> */<br /> protected void doEdit(RenderRequest request, RenderResponse response)<br /> throws UnavailableException, PortletSecurityException, PortletException, IOException {<br /><br /> response.setContentType(CONTENT_TYPE);<br /> StringBuffer content = new StringBuffer();<br /><br /> content.append("<table>");<br /> /* builds a form containing a portlet action URL for targeting itself */<br /> content.append("<form name=\"inputForm\" target=\"_self\" ");<br /> content.append("method=\"POST\" action=\"");<br /> content.append(response.createActionURL().toString() + "\">");<br /><br /> /* get porlet preferences to request the rss feed destinations */<br /> PortletPreferences prefs = request.getPreferences();<br /> String[] rssSources = prefs.getValues(RSS_XML_PREFS, RSS_XML_DEFAULT);<br /><br /> for (int i = 0; i < rssSources.length; i++) {<br /> content.append("<tr><td>");<br /> content.append("<input type=\"checkbox\" name=\"check\" ");<br /> content.append("value=\"" + rssSources + "\" CHECKED >");<br /> content.append(rssSources);<br /> content.append("</td></tr>");<br /> }<br /><br /> content.append("<tr><td>");<br /> content.append("Additional RSS Feed:");<br /> content.append("<input type=\"text\" name=\"inputXml\" value=\"\">");<br /> content.append("<input name=\"inputSubmit\" type=\"submit\" value=\"submit\">");<br /> content.append("</td></tr></form></table>");<br /> response.getWriter().println(content.toString());<br /><br /> }<br /><br /> protected void doHelp(RenderRequest request, RenderResponse response)<br /> throws UnavailableException, PortletSecurityException, PortletException, IOException {<br /><br /> response.setContentType(CONTENT_TYPE);<br /> StringBuffer content = new StringBuffer();<br /><br /> content.append("<table><tr><td>");<br /> content.append("The RSS Portlet transforms newsfeed using a default stylesheet.<BR/>");<br /> content<br /> .append("Note that not all newsfeeds will transform correctly, but none should throw an error.<BR/>");<br /> content.append("To add or remove newfeeds, change the portlet preferences.<BR/>");<br /> PortletURL renderURL = response.createRenderURL();<br /> renderURL.setPortletMode(PortletMode.VIEW);<br /> content.append("<a href=\"" + renderURL.toString() + "\">back</a>");<br /> content.append("</td></tr></table>");<br /><br /> response.getWriter().println(content.toString());<br /> }<br /><br /> protected void doView(RenderRequest request, RenderResponse response)<br /> throws UnavailableException, PortletSecurityException, PortletException, IOException {<br /><br /> response.setProperty("expiration-cache", "125");<br /> response.setContentType(CONTENT_TYPE);<br /> StringBuffer content = new StringBuffer();<br /> String selectedXml = null;<br /><br /> try {<br /> selectedXml = request.getParameter("selectXml");<br /> PrintWriter out = response.getWriter();<br /> String errorMessage = request.getParameter("errorMessage");<br /><br /> if (errorMessage != null) {<br /> addHTMLErrorMessage(content, errorMessage);<br /> }<br /><br /> content.append("<table>");<br /> content.append("<form name=\"selectForm\" target=\"_self\" ");<br /> content.append("method=\"POST\" action=\"");<br /> content.append(response.createActionURL().toString() + "\">");<br /> content.append("<tr><td>");<br /><br /> PortletURL renderURL = response.createRenderURL();<br /> renderURL.setPortletMode(PortletMode.HELP);<br /> content.append("<a href=\"" + renderURL + "\">help</a>");<br /> content.append("</td></tr><tr><td> </td></tr><tr><td>");<br /><br /> /* get porlet preferences to request the rss feed destinations */<br /> PortletPreferences prefs = request.getPreferences();<br /> String[] rssSources = prefs.getValues(RSS_XML_PREFS, RSS_XML_DEFAULT);<br /><br /> addHTMLSelectOption(content, "selectXml", selectedXml, rssSources);<br /><br /> content.append("</td><td>");<br /> content.append("<input name=\"selectSubmit\" type=\"submit\" value=\"go\">");<br /> content.append("</td><td></td></tr>");<br /> content.append("</form></table>");<br /> out.println(content.toString());<br /> addTransformedRSSContent(request, selectedXml, out);<br /><br /> } catch (Exception e) {<br /> throw new PortletException(e);<br /> }<br /><br /> }<br /><br /> /**<br /> * @param request<br /> * the current render request<br /> * @param selectedXml<br /> * the selected String value for the RSS XML source<br /> * @param out<br /> * the current writer object<br /> * @throws PortletException<br /> * @throws IOException<br /> */<br /> private void addTransformedRSSContent(RenderRequest request, String selectedXml, PrintWriter out)<br /> throws PortletException, IOException {<br /><br /> InputStream xmlInput = null;<br /> try {<br /> if (selectedXml == null) {<br /> selectedXml = request.getPreferences().getValue(RSS_XML_PREFS, RSS_XML_DEFAULT[0]);<br /> }<br /> xmlInput = new URL(selectedXml).openStream();<br /><br /> if (xmlInput == null) {<br /> throw new PortletException("No XML found.");<br /> }<br /><br /> DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();<br /> DocumentBuilder builder = factory.newDocumentBuilder();<br /> Transformer transformer = this.template10.newTransformer();<br /><br /> Source source = null;<br /> try {<br /> Document document = builder.parse(xmlInput);<br /> Element element = document.getDocumentElement();<br /> if (element.hasAttribute("version")<br /> && element.getAttribute("version").equals("2.0")) {<br /> transformer = this.template20.newTransformer();<br /> }<br /> source = new DOMSource(document);<br /> } catch (SAXException saxe) {<br /> source = new StreamSource(xmlInput);<br /> }<br /> StreamResult output = new StreamResult(out);<br /> transformer.transform(source, output);<br /> } catch (MalformedURLException e) {<br /> throw new PortletException(e);<br /> } catch (IOException e) {<br /> throw new PortletException(e);<br /> } catch (ParserConfigurationException e) {<br /> throw new PortletException(e);<br /> } catch (TransformerConfigurationException e) {<br /> throw new PortletException(e);<br /> } catch (TransformerException e) {<br /> throw new PortletException(e);<br /> } finally {<br /> if (xmlInput != null) {<br /> xmlInput.close();<br /> }<br /> }<br /> }<br /><br /> /**<br /> * @param content<br /> * the buffer to write in<br /> * @param name<br /> * the name for the HTML select element<br /> * @param selectedValue<br /> * the selected value<br /> * @param sources<br /> * a string array containing the strings for the option elements<br /> */<br /> private void addHTMLSelectOption(StringBuffer content, String name, String selectedValue,<br /> String[] sources) {<br /> content.append("<select name=\"" + name + "\">");<br /> for (int i = 0; i < sources.length; i++) {<br /> content.append("<option value=\"" + sources + "\"");<br /> if ((selectedValue != null) && sources.equals(selectedValue)) {<br /> content.append(" SELECTED ");<br /> }<br /> content.append(">" + sources + "</option>");<br /> }<br /> content.append("</select>");<br /> }<br /><br /> /**<br /> * Adds a HTML error message to a specified string buffer<br /> * <br /> * @param content<br /> * the buffer to write in<br /> * @param errorMessage<br /> * the message that should be included in the response<br /> */<br /> private void addHTMLErrorMessage(StringBuffer content, String errorMessage) {<br /> content.append("<table><tr><td>");<br /> content.append("<font color=\"red\">" + errorMessage + "</font>");<br /> content.append("</td></tr></table>");<br /> }<br /><br /> /**<br /> * Reads the content from the given xsl filename and transforms it into a<br /> * new template object.<br /> * <br /> * @param filename<br /> * the filename of the RSS xsl source file<br /> * @return a new Templates object<br /> * @throws TransformerConfigurationException<br /> */<br /> private Templates getTemplateFromFile(String filename) throws TransformerConfigurationException {<br /> InputStream xslstream = this.getPortletContext().getResourceAsStream(filename);<br /> StreamSource source = new StreamSource(xslstream);<br /> TransformerFactory factory = TransformerFactory.newInstance();<br /> return factory.newTemplates(source);<br /> }<br />}<br /><br /><br />the war archive was too big to be added to the post .. sorry for that.
Please sign in to flag this as inappropriate.