📄 extracttimeentryservlet.java
字号:
package com.wiley.compBooks.EJwithUML.BillingSystemInterface;
import javax.servlet.http.*;
import javax.servlet.*;
import javax.naming.*;
import javax.ejb.*;
import java.rmi.*;
import javax.rmi.PortableRemoteObject;
import java.io.IOException;
import java.util.*;
import org.xml.sax.SAXException;
import com.wiley.compBooks.EJwithUML.TimeCardWorkflow.ExtractTimeEntriesWorkflow;
import com.wiley.compBooks.EJwithUML.TimeCardWorkflow.ExtractTimeEntriesWorkflowHome;
import com.wiley.compBooks.EJwithUML.Dtos.ExtractCriteriaDTO;
import com.wiley.compBooks.EJwithUML.Dtos.TimeEntryReportDTO;
import com.wiley.compBooks.EJwithUML.Dtos.TimeEntryDTO;
import com.wiley.compBooks.EJwithUML.Base.DateUtil;
import com.wiley.compBooks.EJwithUML.Base.ApplicationExceptions.ApplicationException;
import com.wiley.compBooks.EJwithUML.Base.EjbUtil.EjbReferenceNames;
/**
* The ExtractTimeEntryServlet uses the ExtractTimeEntriesWorkflow to service
* the external client like the Billing System. It accepts SOAP/XML request and
* returns SOAP/XML response.
*/
public class ExtractTimeEntryServlet extends HttpServlet
{
private XMLRequestFilter filter = new XMLRequestFilter();
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
doPost(request, response);
}
/**
* Overrides method from HttpServlet. doPost is called by the servlet engine.
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
StringBuffer responseBuffer = new StringBuffer(5000);
responseBuffer.append("<env:Envelope xmlns:env=\"http://www.w3c.org/2002/06/soap-envelope\""
+ " xmlns:tcapp=\"http://com.wiley.compBooks/EJwithUML2e\">");
buildHeaderTag(responseBuffer);
try
{
HashMap requestData = filter.filter(request);
// obtain remote reference to ExtractTimeEntriesWorkflow session bean
Context initial = new InitialContext();
Object rtwobjref = initial.lookup(EjbReferenceNames.EXTRACT_TIME_ENTRY_WORKFLOW_HOME);
ExtractTimeEntriesWorkflowHome home = (ExtractTimeEntriesWorkflowHome)
PortableRemoteObject.narrow(rtwobjref,ExtractTimeEntriesWorkflowHome.class);
ExtractTimeEntriesWorkflow rtw = home.create();
Date startDate = DateUtil.createDate(
(String)requestData.get(XmlTimeEntryReportRequestTags.START_DATE));
Date endDate = DateUtil.createDate(
(String)requestData.get(XmlTimeEntryReportRequestTags.END_DATE));
ExtractCriteriaDTO criteria = new ExtractCriteriaDTO((String)requestData.get(
XmlTimeEntryReportRequestTags.CLIENT_NAME),
startDate,
endDate);
ArrayList users = (ArrayList)requestData.get(
XmlTimeEntryReportRequestTags.USERS);
if (users != null)
{
criteria.setUsers(users);
}
HashMap reports = rtw.extractForCriteria(criteria);
buildBodyTag(responseBuffer, reports, users);
}
catch (Exception e)
{
System.out.println("e= " +e);
buildFaultTag(responseBuffer, e);
}
responseBuffer.append("</env:Envelope>");
response.getWriter().print(responseBuffer.toString());
response.getWriter().flush();
response.getWriter().close();
}
private void buildFaultTag(StringBuffer response, Exception exp)
{
response.append("<env:Fault><env:Code><env:Value>");
if (exp instanceof IOException ||
exp instanceof SAXException)
{
response.append("env:Sender");
}
else
{
response.append("env:Receiver");
}
response.append("</env:Value><env:Subcode><env:Value>" +
((ApplicationException)exp).getOrigin() +
"</env:Value></env:Subcode></env:Code><env:Reason>" +
exp.getClass().getName() +
"</env:Reason><env:Detail>" +
exp.toString() +
"</env:Detail></env:Fault>");
}
private void buildHeaderTag(StringBuffer response)
{
response.append(
"<env:Header xmlns:tcapp=\"http://com.wiley.compBooks/EJwithUML2e\">" +
"<tcapp:Responder env:mustUnderstand=\"1\">");
response.append("TimecardApplication</tcapp:Responder></env:Header>");
}
private void buildBodyTag(StringBuffer response, HashMap responseData,
ArrayList users)
{
response.append("<env:Body><tcapp:TimeEntries>");
buildUserTags(response, responseData);
if (users.size() > responseData.size())
{
//some of the users do not exist
ArrayList userNotInDatabase = new ArrayList();
for(int i=0; i < users.size(); i++)
{
if (!responseData.containsKey((String)users.get(i)))
{
userNotInDatabase.add(users.get(i));
}
}
buildUserNotInDatabaseTag(response, userNotInDatabase);
}
response.append("</tcapp:TimeEntries></env:Body>");
}
private void buildUserTags(StringBuffer response, HashMap responseData)
{
Iterator userIterator = responseData.entrySet().iterator();
while(userIterator.hasNext())
{
TimeEntryReportDTO userData = (TimeEntryReportDTO)((Map.Entry)
userIterator.next()).getValue();
response.append("<tcapp:User><tcapp:Name>"+userData.getName()+
"</tcapp:Name>");
buildTimeEntryTags(response, userData.getTimeEntries());
response.append("</tcapp:User>");
}
}
private void buildTimeEntryTags(StringBuffer response, Iterator timeentries)
{
while(timeentries.hasNext())
{
TimeEntryDTO timeentryData = (TimeEntryDTO)timeentries.next();
response.append("<tcapp:TimeEntry><tcapp:Project>"+
timeentryData.getProjectName()+"</tcapp:Project>");
response.append("<tcapp:ChargeCode>"+
timeentryData.getChargeCodeName()+"</tcapp:ChargeCode>");
response.append("<tcapp:Date>"+
DateUtil.toDateString(timeentryData.getDate())+"</tcapp:Date>");
response.append("<tcapp:Hours>"+
timeentryData.getHours()+"</tcapp:Hours></tcapp:TimeEntry>");
}
}
private void buildUserNotInDatabaseTag(StringBuffer response, ArrayList users)
{
response.append("<tcapp:UserNotInDatabase>");
for(int i=0; i < users.size(); i++)
{
response.append("<tcapp:UserName>"+users.get(i)+
"</tcapp:UserName>");
}
response.append("</tcapp:UserNotInDatabase>");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -