SAS Portlets FileUpload

C

chysm

Hallo zusammen, habe wie der Name des Themas deuten lässt ein Problem einen FileUpload über ein Portlet zu realisieren.

Folgende Fehlermeldung wird geworfen (WebSphere 6.1):
Code:
SRV.8.2: RequestWrapper objects must extend ServletRequestWrapper or HttpServletRequestWrapper ....

Für den FileUpload nutze ich "org.apache.commons.fileupload", hatte das vorher mal in einer lokalen Anwendung probiert, ging einwandfrei....

Ich nehme an das SAS Portal (basiert auf dem Struts Framework) kann den Enctype nicht verarbeiten.
Aber die SAS Portlet-API sieht keinen web.xml Depl. Decriptor vor, sowie für das Deployment auf dem Web-Server kein .war sondern ein .par Archive erzeugt wird.
Ich weiß jetzt nicht wie ich da einen Filter oder Wrapper implementieren könnte.

Gibt es eventuell einen Workaround oder eine andere Lösung,
wäre für jede Hilfe dankbar..

Gruß
Chysm
 
Zuletzt bearbeitet von einem Moderator:
Hallo zusammen,
ich bin nun ein ganzes Stück weiter gekommen.
Habe ein eigenes Servlet geschrieben und binde das als .jar mit in die Portalapplikation ein, klappt auch wunderbar..
Nur leider kommt glei das nächste Problem hinterher :mad:

Dem Upload Form gebe ich als Hidden-Feld die URL zur nächsten Portlet-Action mit, um so vom Servlet zurück zum Porltet zukommen.
Code:
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		super.doGet(request, response);
		
		String urlUp = "";
		if(ServletFileUpload.isMultipartContent(request)){
			try{
				FileItemFactory  fileItemFactory = new DiskFileItemFactory();
				ServletFileUpload fileUpload = new ServletFileUpload(fileItemFactory);
				List fileItems = null;
				fileItems = fileUpload.parseRequest(request);
				Iterator fileItemIterator = fileItems.iterator();
				while(fileItemIterator.hasNext()){
					FileItem fileItem = (FileItem) fileItemIterator.next();
					if(!fileItem.isFormField()){
						String fileItemName = fileItem.getName();
						//Name Bearbeiten
						fileItemName = fileItemName.replace("\\", "/");
						fileItemName = fileItemName.substring(fileItemName.lastIndexOf('/') + 1);
                                                      //Lokales Verzeichnis zum Testen des Uploads
						File uploadedFile = new File("C://Uploads/"+fileItemName);
						fileItem.write(uploadedFile);
						
					}
					else{
						//Portlet URL auslesen
						if(fileItem.getString().contains("sas/portlets")){
							urlUp = fileItem.getString();
						}
					}
				}

			}catch(Exception ex){
				ex.printStackTrace();
			}
		}
	//	RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(urlUp);
	//	dispatcher.forward(request,response);
		response.sendRedirect(urlUp);
		
	}

Beim Redirect fliegt dann folgende Exception:
Code:
[01.08.09 19:05:07:151 CEST] 0000003b ServletWrappe E   SRVE0068E: Es wurde eine Ausnahme angefangen, die in einer der Servicemethoden des Servlet FileUpload ausgelöst wurde. Ausgelöste Ausnahme: java.lang.IllegalStateException
	at com.ibm.ws.webcontainer.webapp.WebAppDispatcherContext.sendRedirectWithStatusCode(WebAppDispatcherContext.java:492)
	at com.ibm.ws.webcontainer.webapp.WebAppDispatcherContext.sendRedirect(WebAppDispatcherContext.java:449)
	at com.ibm.ws.webcontainer.srt.SRTServletResponse.sendRedirect(SRTServletResponse.java:1036)
...................................................
[01.08.09 19:05:07:213 CEST] 0000003b SRTServletRes W   WARNING: Cannot set status. Response already committed.

Bin wie immer für jeden Rat dankbar!

Gruß
Chysm
 
Zuletzt bearbeitet von einem Moderator:
Zurück