Through ContentAccessService, we can access external and internal resources. This service provides similar function like java.net.URL, HttpClient.There are four methods available in this service.
- getInputStream(java.lang.String urlString, PortletRequest req, PortletResponse resp)
Returns an input stream that reads from the passed url
- getMarkup(java.lang.String urlString, PortletRequest req, RenderResponse resp)
Returns the markup of the input stream read from the passed url.
- getURL(java.lang.String urlString, PortletRequest request, PortletResponse response)
Re Returns an URL object after following redirects using a proxy if necessary
- include(java.lang.String urlString, RenderRequest request, RenderResponse response, PortletContextcontext) writes the content of the given url to the output stream of the portlet following redirects and using a proxy if necessary.
package com.ibm.mycontentaccessservice;
import java.io.*;
import java.net.URL;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.portlet.*;
import com.ibm.portal.portlet.service.PortletServiceHome;
import com.ibm.portal.portlet.service.PortletServiceUnavailableException;
import com.ibm.portal.portlet.service.contentaccess.ContentAccessService;
/**
* Service to access external and internal resources.
* This on-demand proxy allows the creation of a URL or Stream which can then be passed to other classes
* without knowing about the proxy support to enable seemless adaption to proxied environments.
* The proxying will be provided to the URL object by means of a StreamHandler.
*/
public class MyContentAccessServicePortlet extends GenericPortlet {
public static final String JSP_FOLDER = "/_MyContentAccessService/jsp/"; // JSP folder name
public static final String VIEW_JSP = "MyContentAccessServicePortletView"; // JSP file name to be rendered on the view mode
PortletServiceHome psh;
ContentAccessService contentAccessservice=null;
/**
* @see javax.portlet.Portlet#init()
*/
public void init() throws PortletException{
super.init();
Context ctx;
try {
ctx = new InitialContext();
psh = (PortletServiceHome) ctx.lookup("portletservice/com.ibm.portal.portlet.service.contentaccess.ContentAccessService");
contentAccessservice = (ContentAccessService) psh.getPortletService(ContentAccessService.class);
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* Serve up the <code>view</code> mode.
*
* @see javax.portlet.GenericPortlet#doView(javax.portlet.RenderRequest, javax.portlet.RenderResponse)
*/
public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
// Set the MIME type for the render response
response.setContentType(request.getResponseContentType());
String urlS="http://www.google.co.in";
InputStream in=getHTTPInputStream(urlS, request, response);//Returns Markup in InputStream format.
String res=convertStreamToString(in);
request.setAttribute("method1", res);
String markup=getMarkup(urlS, request, response);//Returns Markup in String format.
request.setAttribute("method2", markup);
// Invoke the JSP to render
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(getJspFilePath(request, VIEW_JSP));
rd.include(request,response);
include(urlS, request, response);//include google.com markup into our code.
}
/**
* Process an action request.
*
* @see javax.portlet.Portlet#processAction(javax.portlet.ActionRequest, javax.portlet.ActionResponse)
*/
public void processAction(ActionRequest request, ActionResponse response) throws PortletException, java.io.IOException {
}
/**
* Returns JSP file path.
*
* @param request Render request
* @param jspFile JSP file name
* @return JSP file path
*/
private static String getJspFilePath(RenderRequest request, String jspFile) {
String markup = request.getProperty("wps.markup");
if( markup == null )
markup = getMarkup(request.getResponseContentType());
return JSP_FOLDER + markup + "/" + jspFile + "." + getJspExtension(markup);
}
/**
* Convert MIME type to markup name.
*
* @param contentType MIME type
* @return Markup name
*/
private static String getMarkup(String contentType) {
if( "text/vnd.wap.wml".equals(contentType) )
return "wml";
else
return "html";
}
/**
* Returns the file extension for the JSP file
*
* @param markupName Markup name
* @return JSP extension
*/
private static String getJspExtension(String markupName) {
return "jsp";
}
protected void include(String urlS, RenderRequest request, RenderResponse response)
throws IOException, PortletServiceUnavailableException {
if (psh != null && contentAccessservice!=null)
{
// content access service handles local and remote URLs transparently
contentAccessservice.include( urlS, request, response,getPortletConfig().getPortletContext());
}
}
protected InputStream getHTTPInputStream(String urlS, PortletRequest request, PortletResponse response)
throws IOException, PortletServiceUnavailableException {
if (psh != null && contentAccessservice!=null)
{
// content access service handles local and remote URLs transparently
return contentAccessservice.getInputStream( urlS, request, response );
} else
{
// no content access service available
return (new URL(urlS).openStream());
}
}
protected String getMarkup(String urlS, PortletRequest request, PortletResponse response)
throws IOException, PortletServiceUnavailableException {
if (psh != null && contentAccessservice!=null)
{
// content access service handles local and remote URLs transparently
return contentAccessservice.getMarkup(urlS, request, (RenderResponse) response );
}
return null;
}
private String convertStreamToString(InputStream is)throws IOException {
/*
* To convert the InputStream to String we use the BufferedReader.readLine()
* method. We iterate until the BufferedReader return null which means
* there's no more data to read. Each line will appended to a StringBuilder
* and returned as String.
*/
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuffer sb = new StringBuffer();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
throw e;
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
throw e;
}
}
return sb.toString();
}
}
ScreenShot:
Click to download samplecode
W
No comments:
Post a Comment