Added try/catch to prevent ClientAbortException java.net.SocketException Broken Pipe

git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/user/workspace-tree-widget@117251 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Francesco Mangiacrapa 2015-07-15 09:59:51 +00:00
parent 2b0bf9c3d0
commit 2d93244574
3 changed files with 145 additions and 77 deletions

View File

@ -161,13 +161,6 @@ public class LocalUploadServlet extends HttpServlet {
return;
}
/*
if (file == null) {
logger.error("Error processing request in upload servlet: No file to upload");
sendError(response, "Internal error: No file to upload");
return;
}*/
if (destinationId == null) {
logger.error("Error processing request in upload servlet: No destination folder id found");
sendError(response, "Internal error: No destination folder id found");
@ -221,43 +214,21 @@ public class LocalUploadServlet extends HttpServlet {
String contentType = MimeTypeUtil.getMimeType(itemName, new BufferedInputStream(fileUploadIS));
logger.trace("Content type (mime type): "+contentType + " unique name: "+itemName);
// System.out.println("Content type: "+contentType + " unique name: "+itemName);
String extension = FilenameUtils.getExtension(itemName);
logger.trace("extension: "+extension);
// System.out.println("extension: "+extension);
if(uploadType.compareTo(FILE)==0) {//IS FILE UPLOAD
boolean isZipFile = MimeTypeUtil.isZipContentType(contentType);
if(isZipFile && (extension.compareToIgnoreCase(D4ST)==0)){ //Create REPORT TEMPLATE
// String newItemName = "";
//
// if(!isOverwrite)
// newItemName = itemName.substring(0,itemName.lastIndexOf(D4ST)-1); //remove extension
// else
// newItemName = item.getName();
// System.out.println("itemwithoutext " +itemwithoutext);
String newItemName = itemName;
logger.trace("createTemplate: "+newItemName);
createTemplate(request.getSession(), wa, newItemName, openInputStream(file), destinationFolder, response, isOverwrite);
}else if(isZipFile && (extension.compareToIgnoreCase(D4SR)==0)){ //Create REPORT
// String newItemName = "";
//
// if(!isOverwrite)
// newItemName = itemName.substring(0,itemName.lastIndexOf(D4SR)-1); //remove extension
// else
// newItemName = item.getName();
// System.out.println("itemwithoutext " +itemwithoutext);
String newItemName = itemName;
logger.trace("createReport: "+newItemName);
createReport(request.getSession(), wa, newItemName, openInputStream(file), destinationFolder, response, isOverwrite);
@ -298,11 +269,6 @@ public class LocalUploadServlet extends HttpServlet {
}
}
//} catch (IOException e) {
// logger.error("Error creating elements", e);
// sendError(response, "Internal error: "+e.getMessage());
// return;
/**
*
@ -336,23 +302,16 @@ public class LocalUploadServlet extends HttpServlet {
private void notifyUploadInSharedFolder(final HttpSession httpSession, final Workspace workspace, final String itemId, final String destinationFolderId, final boolean isOverwrite){
new Thread(){
public void run() {
WorkspaceItem sourceItem;
try {
sourceItem = workspace.getItem(itemId);
String sourceSharedId = sourceItem.getIdSharedFolder();
WorkspaceItem folderDestinationItem = workspace.getItem(destinationFolderId);
NotificationsUtil.checkSendNotifyChangedItemToShare(httpSession, sourceItem, sourceSharedId, folderDestinationItem,isOverwrite);
} catch (Exception e) {
logger.error("Error in notifyUploadInSharedFolder", e);
}
};
}.start();
@ -374,7 +333,6 @@ public class LocalUploadServlet extends HttpServlet {
if(createdItem!=null){
notifyUploadInSharedFolder(httpSession,wa,createdItem.getId(),destinationFolder.getId(), isOverwrite);
sendMessage(response, "File "+createdItem.getName()+" imported correctly in "+destinationFolder.getPath());
}
else
@ -426,7 +384,6 @@ public class LocalUploadServlet extends HttpServlet {
report = wa.createReport(itemName, "", Calendar.getInstance(), Calendar.getInstance(), "", "", "", 0, "", stream, destinationFolder.getId());
notifyUploadInSharedFolder(httpSession,wa,report.getId(),destinationFolder.getId(), isOverwrite);
sendMessage(response, "File "+report.getName()+" imported correctly in "+destinationFolder.getPath());
}
else{ //CASE OVERWRITE
@ -435,12 +392,10 @@ public class LocalUploadServlet extends HttpServlet {
if(rep!=null){
notifyUploadInSharedFolder(httpSession,wa,rep.getId(),destinationFolder.getId(), isOverwrite);
sendMessage(response, "File "+rep.getName()+" imported correctly in "+destinationFolder.getPath());
}
else
sendError(response,"Internal error: Workspace Item Not Found");
}
} catch (WrongDestinationException e) {
logger.error("Error creating elements", e);
@ -463,7 +418,6 @@ public class LocalUploadServlet extends HttpServlet {
template = wa.createReportTemplate(itemName, "", Calendar.getInstance(), Calendar.getInstance(), "", "", 0, "", stream, destinationFolder.getId());
notifyUploadInSharedFolder(httpSession,wa,template.getId(),destinationFolder.getId(), isOverwrite);
sendMessage(response, "File "+template.getName()+" imported correctly in "+destinationFolder.getPath());
}else{ //CASE OVERWRITE
@ -472,12 +426,10 @@ public class LocalUploadServlet extends HttpServlet {
if(rep!=null){
notifyUploadInSharedFolder(httpSession,wa,rep.getId(),destinationFolder.getId(), isOverwrite);
sendMessage(response, "File "+rep.getName()+" imported correctly in "+destinationFolder.getPath());
}
else
sendError(response,"Internal error: Workspace Item Not Found");
}
} catch (WrongDestinationException e) {
@ -491,29 +443,48 @@ public class LocalUploadServlet extends HttpServlet {
}
protected void sendError(HttpServletResponse response, String message) throws IOException
{
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
HandlerResultMessage resultMessage = HandlerResultMessage.errorResult(message);
response.getWriter().write(resultMessage.toString());
response.flushBuffer();
protected void sendError(HttpServletResponse response, String message) throws IOException{
try {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
HandlerResultMessage resultMessage = HandlerResultMessage.errorResult(message);
response.getWriter().write(resultMessage.toString());
response.flushBuffer();
} catch (IOException e){
logger.warn("IOException class name: "+e.getClass().getSimpleName());
if (e.getClass().getSimpleName().equals("ClientAbortException"))
logger.warn("Skipping ClientAbortException: "+e.getMessage());
else
throw e; //Sending Exceptions
}
}
protected void sendMessage(HttpServletResponse response, String message) throws IOException
{
response.setStatus(HttpServletResponse.SC_ACCEPTED);
HandlerResultMessage resultMessage = HandlerResultMessage.okResult(message);
response.getWriter().write(resultMessage.toString());
response.flushBuffer();
protected void sendMessage(HttpServletResponse response, String message) throws IOException{
try {
response.setStatus(HttpServletResponse.SC_ACCEPTED);
HandlerResultMessage resultMessage = HandlerResultMessage.okResult(message);
response.getWriter().write(resultMessage.toString());
response.flushBuffer();
} catch (IOException e){
logger.warn("IOException class name: "+e.getClass().getSimpleName());
if (e.getClass().getSimpleName().equals("ClientAbortException"))
logger.warn("Skipping ClientAbortException: "+e.getMessage());
else
throw e; //Sending Exceptions
}
}
protected void sendWarnMessage(HttpServletResponse response, String message) throws IOException
{
response.setStatus(HttpServletResponse.SC_ACCEPTED);
HandlerResultMessage resultMessage = HandlerResultMessage.warnResult(message);
response.getWriter().write(resultMessage.toString());
response.flushBuffer();
protected void sendWarnMessage(HttpServletResponse response, String message) throws IOException{
try {
response.setStatus(HttpServletResponse.SC_ACCEPTED);
HandlerResultMessage resultMessage = HandlerResultMessage.warnResult(message);
response.getWriter().write(resultMessage.toString());
response.flushBuffer();
} catch (IOException e){
logger.warn("IOException class name: "+e.getClass().getSimpleName());
if (e.getClass().getSimpleName().equals("ClientAbortException"))
logger.warn("Skipping ClientAbortException: "+e.getMessage());
else
throw e; //Sending Exceptions
}
}
}

View File

@ -0,0 +1,86 @@
/**
*
*/
package org.gcube.portlets.user.workspace;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import org.gcube.common.homelibrary.home.HomeLibrary;
import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException;
import org.gcube.common.homelibrary.home.exceptions.InternalErrorException;
import org.gcube.common.homelibrary.home.exceptions.UserNotFoundException;
import org.gcube.common.homelibrary.home.workspace.Workspace;
import org.gcube.common.homelibrary.home.workspace.WorkspaceSharedFolder;
import org.gcube.common.homelibrary.home.workspace.exceptions.InsufficientPrivilegesException;
import org.gcube.common.homelibrary.home.workspace.exceptions.ItemAlreadyExistException;
import org.gcube.common.homelibrary.home.workspace.exceptions.ItemNotFoundException;
import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException;
import org.gcube.common.homelibrary.home.workspace.exceptions.WrongDestinationException;
import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.common.scope.impl.ScopeBean;
/**
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Jul 14, 2015
*/
public class CreateSharedFolder {
protected static Logger logger = Logger.getLogger(CreateSharedFolder.class);
// public static String DEFAULT_SCOPE = "/d4science.research-infrastructures.eu/gCubeApps/EcologicalModelling"; //PRODUCTION
public static String DEFAULT_SCOPE = "/gcube/devsec"; //DEV
public static String USER = "francesco.mangiacrapa"; //PRODUCTION
public static void main(String[] args) {
try {
ScopeBean scope = new ScopeBean(DEFAULT_SCOPE);
ScopeProvider.instance.set(scope.toString());
Workspace workspace = HomeLibrary.getHomeManagerFactory()
.getHomeManager().getHome(USER)
.getWorkspace();
String folderName = "Test Folder";
String desc = "descr";
List<String> listLogin = new ArrayList<String>();
listLogin.add("valentina.marioli");
listLogin.add("massimiliano.assante");
WorkspaceSharedFolder sharedFolder = workspace.createSharedFolder(
folderName, desc, listLogin, workspace.getRoot().getId());
if (sharedFolder == null)
System.out.println("shared folder is null");
System.out
.println("Shared folder created: " + sharedFolder.getId());
} catch (InsufficientPrivilegesException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ItemAlreadyExistException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (WrongDestinationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ItemNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (WorkspaceFolderNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InternalErrorException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (HomeNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UserNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

View File

@ -29,12 +29,12 @@ import org.gcube.common.scope.impl.ScopeBean;
public class ItemRetrieve {
public static String DEFAULT_SCOPE = "/d4science.research-infrastructures.eu/gCubeApps"; //PRODUCTION
// public static String DEFAULT_SCOPE = "/gcube/devsec"; //DEV
// public static String DEFAULT_SCOPE = "/d4science.research-infrastructures.eu/gCubeApps"; //PRODUCTION
public static String DEFAULT_SCOPE = "/gcube/devsec"; //DEV
public static String TEST_USER = "francesco.mangiacrapa";
// public static String ITEMID = "63832213-098d-42d1-8774-89b6349764c0"; //Activity T3.4 working drafts/T2-EC-IMAR-HO-14-015 iMarine Sustainability WP - Business Model tools.pdf
public static String ITEMID = "ec8bcf91-0969-450e-971c-a273c114d9e4";
public static String ITEMID = "d81d3a64-603f-4907-ae74-be8353211807";
// d81d3a64-603f-4907-ae74-be8353211807
protected static Logger logger = Logger.getLogger(ItemRetrieve.class);
@ -46,9 +46,12 @@ public class ItemRetrieve {
System.out.println("init HL");
try {
Workspace ws = getWorkspace();
retrieveFirstLevel(ws, ITEMID);
System.out.println("get workspace -> OK");
WorkspaceItem item = ws.getItem(ITEMID);
System.out.println("get item -> OK");
System.out.println("get item id: "+item.getId()+", name: "+item.getName() +", parent: "+item.getParent());
System.out.println(item);
}catch(Exception e){
e.printStackTrace();
@ -82,7 +85,7 @@ public class ItemRetrieve {
}
private static void retrieveFirstLevel(Workspace ws){
private static void retrieveFirstLevel(Workspace ws, String foundID){
try {
@ -109,6 +112,14 @@ public class ItemRetrieve {
int othersCounter = 0;
for (WorkspaceItem workspaceItem : children) {
if(foundID!=null && !foundID.isEmpty()){
if(workspaceItem.getId().compareTo(foundID)==0){
System.out.println("ITEM FOUND id: "+workspaceItem.getId()+", name: "+workspaceItem.getName());
return;
}
}
switch (workspaceItem.getType()) {
case FOLDER: