Step by Step process for creating a servlet to serve WCM File Resource Component files
-RAD (Rational Applicaion Developer) > file > new > project > web > dynamic web project > assign project name and ear project name > accept default project facets > assign context root > finish
-Right mouse on project > new > servlet > assign java package name eg "com.ibm.render" > assign class name eg "render" > assign desired url mapping or take default > accept defaults > finish
-Right mouse on project > properties > java build path > add external jars > add ilwwcm-api.jar and ilwwcm-api-impl.jar from portal directory:
:.../ibm/websphere/portalserver/wcm/prereq.wcm/wcm/shared/app
-Paste code (see below) in the servlet java source file
-Right mouse on servlet in RAD Project Explorer > export > ear file > assign location > finish
-Install ear file using WAS Admin Console > applications > enterprise applications > install > enter path to the ear file > use defaults for "select installation options" page > bind the app to websphere portal
-Instead of regenerating the .ear file every time you make a change while testing/developing the servlet, you can copy the .class file for the servlet from the RAD project directory to the deployed location under .../installedApps///.....
-After testing is complete re-export the ear file and "update" the app using WAS Admin Console > applications > enterprise applications > select the application > update > replace all files > take defaults
Sample URL used to invoke the servlet and render a pdf file in file resource component named "1040FileResourceComponent":
http://index.rtp.raleigh.ibm.com:10040/render/Render?name=1040FileResourceComponent&library=Web%20Content
Code for servlet java source file:
package com.ibm.render; Change this to your preferred package name
import java.io.IOException;
import java.io.PrintWriter;
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.ibm.workplace.wcm.api.exceptions.*;
import com.ibm.workplace.wcm.api.*;
/
- Servlet implementation class for Servlet: Render
- /
public class Render extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
/* (non-Java-doc)
- @see javax.servlet.http.HttpServlet#HttpServlet()
- /
public Render() {
super();
}
/* (non-Java-doc)
- @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
- /
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
TODO Auto-generated method stub
try {
DocumentId docId=null;
DocumentIdIterator itemsIterator=null;
Workspace myworkspace = WCM_API.getRepository().getSystemWorkspace();
if ( myworkspace == null ) {
System.out.println( "Unable to get a valid workspace" );
}
else {
System.out.println("Found workspace");
}
myworkspace.login();
Set the workspace to the correct library.
DocumentLibrary MyLibrary = myworkspace.getDocumentLibrary(request.getParameter("library"));
if (MyLibrary == null)
{
System.out.println("Library is null
");
}
else {
myworkspace.setCurrentDocumentLibrary(MyLibrary);
}
itemsIterator = myworkspace.findComponentByName(request.getParameter("name"));
docId = (DocumentId) itemsIterator.next();
System.out.println("Document id: " + docId.toString());
LibraryFileComponent myFileComponent = (LibraryFileComponent) myworkspace.getById(docId);
System.out.println("myFileComponent: " + myFileComponent.toString());
String myFileName = myFileComponent.getFileName();
System.out.println("File Name: " + myFileName);
byte[] myFile = myFileComponent.getFile();
int size = myFile.length;
int namesize = myFileName.length();
System.out.println("Bytes loaded...array size = " + myFile.length);
String nametail = myFileName.substring(namesize-3);
System.out.println("nametail: " + nametail);
if(nametail.equals("pdf")) {
response.setHeader("Content-Type", "application/pdf");
}
else if (nametail.equals("doc")) {
response.setHeader("Content-Type", "application/msword");
}
else
{
response.setHeader("Content-Type", "text/html");
}
OutputStream outputStream = response.getOutputStream();
outputStream.write(myFile,0, size);
outputStream.flush();
myworkspace.logout();
}
catch (Exception e) {
out.println("Exception " + e.getMessage());
e.printStackTrace();
}
}
/* (non-Java-doc)
- @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
- /
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
TODO Auto-generated method stub
}
}