Skip to content
Snippets Groups Projects
Commit 72877d86 authored by Brian Major's avatar Brian Major
Browse files

s1711 - Removed CSV data transfer - it was causing AJP/output stream mixing

parent d14b38a6
No related branches found
No related tags found
No related merge requests found
......@@ -68,17 +68,15 @@
*/
package ca.nrc.cadc.ac.server.web;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import ca.nrc.cadc.ac.Group;
import ca.nrc.cadc.ac.GroupReader;
import ca.nrc.cadc.ac.GroupWriter;
import ca.nrc.cadc.ac.User;
import ca.nrc.cadc.ac.server.GroupPersistence;
import java.io.InputStream;
import java.security.Principal;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import javax.servlet.http.HttpServletResponse;
public class CreateGroupAction extends GroupsAction
{
......@@ -96,8 +94,8 @@ public class CreateGroupAction extends GroupsAction
GroupPersistence groupPersistence = getGroupPersistence();
Group group = GroupReader.read(this.inputStream);
Group newGroup = groupPersistence.addGroup(group);
setContentType("application/xml");
GroupWriter.write(newGroup, getOutputStream());
this.response.setContentType("application/xml");
GroupWriter.write(newGroup, this.response.getOutputStream());
List<String> addedMembers = null;
if ((newGroup.getUserMembers().size() > 0) || (newGroup.getGroupMembers().size() > 0))
......
......@@ -70,7 +70,6 @@
import ca.nrc.cadc.ac.Group;
import ca.nrc.cadc.ac.GroupWriter;
import ca.nrc.cadc.ac.server.GroupPersistence;
import javax.servlet.http.HttpServletResponse;
public class GetGroupAction extends GroupsAction
{
......@@ -87,8 +86,8 @@ public class GetGroupAction extends GroupsAction
{
GroupPersistence groupPersistence = getGroupPersistence();
Group group = groupPersistence.getGroup(this.groupName);
setContentType("application/xml");
GroupWriter.write(group, getOutputStream());
this.response.setContentType("application/xml");
GroupWriter.write(group, this.response.getOutputStream());
return null;
}
......
......@@ -65,21 +65,22 @@
* $Revision: 4 $
*
************************************************************************
*/package ca.nrc.cadc.ac.server.web;
*/
package ca.nrc.cadc.ac.server.web;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Collection;
import ca.nrc.cadc.ac.server.GroupPersistence;
import com.csvreader.CsvWriter;
import org.apache.log4j.Logger;
import javax.servlet.http.HttpServletResponse;
import ca.nrc.cadc.ac.server.GroupPersistence;
public class GetGroupNamesAction extends GroupsAction
{
private static final Logger log = Logger.getLogger(GetGroupNamesAction.class);
GetGroupNamesAction(GroupLogInfo logInfo)
{
super(logInfo);
......@@ -90,16 +91,21 @@ public class GetGroupNamesAction extends GroupsAction
{
GroupPersistence groupPersistence = getGroupPersistence();
Collection<String> groups = groupPersistence.getGroupNames();
setContentType("text/csv");
final Writer writer = new OutputStreamWriter(getOutputStream());
final CsvWriter csvWriter = new CsvWriter(writer, ',');
log.debug("Found " + groups.size() + " group names");
response.setContentType("text/plain");
log.debug("Set content-type to text/plain");
Writer writer = response.getWriter();
boolean start = true;
for (final String group : groups)
{
csvWriter.write(group);
if (!start)
{
writer.write("\r\n");
}
csvWriter.endRecord();
writer.write(group);
start = false;
}
return null;
}
}
......@@ -69,7 +69,6 @@
package ca.nrc.cadc.ac.server.web;
import java.io.IOException;
import java.io.OutputStream;
import java.security.AccessControlException;
import java.security.Principal;
import java.security.PrivilegedActionException;
......@@ -90,108 +89,99 @@ import ca.nrc.cadc.ac.server.GroupPersistence;
import ca.nrc.cadc.ac.server.PluginFactory;
import ca.nrc.cadc.ac.server.UserPersistence;
import ca.nrc.cadc.net.TransientException;
import ca.nrc.cadc.uws.server.SyncOutput;
public abstract class GroupsAction
implements PrivilegedExceptionAction<Object>
{
private static final Logger log = Logger.getLogger(GroupsAction.class);
protected GroupLogInfo logInfo;
private SyncOutput syncOutput;
protected HttpServletResponse response;
GroupsAction(GroupLogInfo logInfo)
{
this.logInfo = logInfo;
}
public void doAction(Subject subject, final HttpServletResponse response)
public void doAction(Subject subject, HttpServletResponse response)
throws IOException
{
syncOutput = new SyncOutput()
try
{
@Override
public void setResponseCode(int code)
try
{
response.setStatus(code);
}
this.response = response;
@Override
public void setHeader(String key, String value)
if (subject == null)
{
response.setHeader(key, value);
run();
}
@Override
public OutputStream getOutputStream() throws IOException
else
{
return response.getOutputStream();
Subject.doAs(subject, this);
}
};
try
}
catch (PrivilegedActionException e)
{
if (subject == null)
Throwable cause = e.getCause();
if (cause != null)
{
run();
throw cause;
}
else
{
runPrivileged(subject);
throw e;
}
}
catch (AccessControlException e)
{
log.debug("Permission denied", e);
log.debug(e);
String message = "Permission Denied";
this.logInfo.setMessage(message);
sendError(403, message);
}
catch (IllegalArgumentException e)
{
log.debug("Illegal argument", e);
log.debug(e);
String message = e.getMessage();
this.logInfo.setMessage(message);
sendError(400, message);
}
catch (MemberNotFoundException e)
{
log.debug("Member Not Found", e);
log.debug(e);
String message = "Member not found: " + e.getMessage();
this.logInfo.setMessage(message);
sendError(404, message);
}
catch (GroupNotFoundException e)
{
log.debug("Group not found", e);
log.debug(e);
String message = "Group not found: " + e.getMessage();
this.logInfo.setMessage(message);
sendError(404, message);
}
catch (UserNotFoundException e)
{
log.debug("User Not Found", e);
log.debug(e);
String message = "User not found: " + e.getMessage();
this.logInfo.setMessage(message);
sendError(404, message);
}
catch (MemberAlreadyExistsException e)
{
log.debug("Member Already Exists", e);
log.debug(e);
String message = "Member already exists: " + e.getMessage();
this.logInfo.setMessage(message);
sendError(409, message);
}
catch (GroupAlreadyExistsException e)
{
log.debug("Group Already Exists", e);
log.debug(e);
String message = "Group already exists: " + e.getMessage();
this.logInfo.setMessage(message);
sendError(409, message);
}
catch (UnsupportedOperationException e)
{
log.debug("Unsupported Operation", e);
log.debug(e);
this.logInfo.setMessage("Not yet implemented.");
sendError(501);
}
......@@ -213,58 +203,27 @@ public abstract class GroupsAction
}
}
private void runPrivileged(final Subject subject) throws Throwable
{
try
{
Subject.doAs(subject, this);
}
catch (PrivilegedActionException e)
{
final Throwable cause = e.getCause();
if (cause != null)
{
throw cause;
}
throw e;
}
}
protected final void setStatusCode(final int statusCode)
{
syncOutput.setResponseCode(statusCode);
}
protected final OutputStream getOutputStream() throws IOException
{
return syncOutput.getOutputStream();
}
protected final void setContentType(final String contentType)
{
syncOutput.setHeader("Content-Type", contentType);
}
protected final void setRedirectLocation(final String location)
{
syncOutput.setHeader("Location", location);
}
private void sendError(int responseCode)
throws IOException
{
sendError(responseCode, null);
}
private void sendError(final int code, String message)
private void sendError(int responseCode, String message)
throws IOException
{
setContentType("text/plain");
setStatusCode(code);
if (!this.response.isCommitted())
{
this.response.setContentType("text/plain");
if (message != null)
{
getOutputStream().write(message.getBytes());
this.response.getWriter().write(message);
}
this.response.setStatus(responseCode);
}
else
{
log.warn("Could not send error " + responseCode + " (" + message + ") because the response is already committed.");
}
}
......
......@@ -185,6 +185,7 @@ public class GroupsActionFactory
if (action != null)
{
log.debug("Returning action: " + action.getClass());
return action;
}
throw new IllegalArgumentException("Bad groups request: " + method + " on " + path);
......
......@@ -68,17 +68,14 @@
*/
package ca.nrc.cadc.ac.server.web;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import ca.nrc.cadc.ac.Group;
import ca.nrc.cadc.ac.GroupReader;
import ca.nrc.cadc.ac.GroupWriter;
import ca.nrc.cadc.ac.User;
import ca.nrc.cadc.ac.server.GroupPersistence;
import java.io.InputStream;
import java.security.Principal;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import javax.servlet.http.HttpServletResponse;
public class ModifyGroupAction extends GroupsAction
{
......@@ -137,8 +134,7 @@ public class ModifyGroupAction extends GroupsAction
}
logGroupInfo(group.getID(), deletedMembers, addedMembers);
setStatusCode(303);
setRedirectLocation(request);
this.response.sendRedirect(request);
return null;
}
......
......@@ -68,15 +68,16 @@
*/
package ca.nrc.cadc.ac.client;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.security.AccessControlContext;
import java.security.AccessControlException;
import java.security.AccessController;
......@@ -110,8 +111,6 @@ import ca.nrc.cadc.net.HttpUpload;
import ca.nrc.cadc.net.InputStreamWrapper;
import ca.nrc.cadc.net.NetUtil;
import com.csvreader.CsvReader;
/**
* Client class for performing group searching and group actions
......@@ -319,15 +318,11 @@ public class GMSClient
{
try
{
final CsvReader reader =
new CsvReader(inputStream, ',',
Charset.forName("UTF-8"));
if (reader.readRecord())
{
for (int i = 0; i < reader.getColumnCount(); i++)
{
groupNames.add(reader.get(i));
}
InputStreamReader inReader = new InputStreamReader(inputStream);
BufferedReader reader = new BufferedReader(inReader);
String line;
while ((line = reader.readLine()) != null) {
groupNames.add(line);
}
}
catch (Exception bug)
......@@ -363,8 +358,8 @@ public class GMSClient
throw new IOException("HttpResponse (" + responseCode + ") - " + errMessage);
}
log.error("Content-Length: " + httpDownload.getContentLength());
log.error("Content-Type: " + httpDownload.getContentType());
log.debug("Content-Length: " + httpDownload.getContentLength());
log.debug("Content-Type: " + httpDownload.getContentType());
return groupNames;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment