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