you cannot use RPC to upload files as i may know. when uploading you need to submit a HTML form.
best regards, Rudolf Michael On Tue, May 11, 2010 at 1:16 PM, compuroad <[email protected]>wrote: > Anyone? > > On May 9, 11:47 am, compuroad <[email protected]> wrote: > > I am trying to use GAEBlobstorewith GWT. I have changed the sample > > they have online: > http://code.google.com/appengine/docs/java/blobstore/overview.html > > I replaced the jsp page with a GWT page (below). I replaced the call > > to "<%= blobstoreService.createUploadUrl("/upload") %>" with a RPC > > call which is initiated by "controller.getUploadURL("/index"). > > However I am getting the following error: > > > > SEVERE: [1273002680440000] javax.servlet.ServletContext log: > > Exception > > while dispatching incoming RPC call > > com.google.gwt.user.server.rpc.UnexpectedException: Service method > > 'public abstract java.lang.String > > > net.compuroad.cerrado.client.data.DataAccessService.getUploadURL(java.lang. > > String)' > > threw an unexpected exception: java.lang.NoClassDefFoundError: com/ > > google/appengine/api/blobstore/BlobstoreServiceFactory > > at > > com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java: > > 360) > > at > > com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java: > > 546) > > at > > > com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServi > > ceServlet.java: > > 166) > > > > I have installed GAE SDK 1.3.3.1. What I don't understand is why GWT > > is looking for a GAE class "BlobstoreServiceFactory" that is only > > called in the server side via RPC. Any ideas will be appreciated. > > > > Thanks, > > > > Wilson > > > > //GWT page to upload the images: > > public class ImagePage2 extends Page { > > private String[] mediaList = {"Select > > media","picture","video"}; > > private FileUpload upload = null; > > private Controller controller = null; > > private static CerradoConstants constants = null; > > private final FormPanel form = new FormPanel(); > > private VerticalPanel panel = new VerticalPanel(); > > private FlexTable table = new FlexTable(); > > private Button btnAddImage = new Button("Add Image"); > > private Button btnUpload = new Button("Upload"); > > private TextBox txtPropertyID = new TextBox(); > > private TextBox txtPropertyName = new TextBox(); > > /** > > * Constructor > > */ > > public ImagePage2(final Controller controller, final > > CerradoConstants constants) { > > this.constants = constants; > > this.controller = controller; > > // Create a FormPanel and point it at a service. > > //form.setAction(GWT.getModuleBaseURL() +"Image"); > > // Because we're going to add a FileUpload widget, we'll > > need to set the > > // form to use the POST method, and multipart MIME > > encoding. > > form.setEncoding(FormPanel.ENCODING_MULTIPART); > > form.setMethod(FormPanel.METHOD_POST); > > form.setWidget(panel); > > btnAddImage.addClickHandler( new ClickHandler(){ > > @Override > > public void onClick(ClickEvent event) { > > upload = new FileUpload(); > > upload.setName("uploadForm"); > > upload.setSize("450px", "25px"); > > panel.add(upload); > > } > > }); > > btnUpload.addClickHandler( new ClickHandler(){ > > @Override > > public void onClick(ClickEvent event) { > > /***This call initiates the RPC and generates > > the error **/ > > controller.getUploadURL("/index"); > > } > > }); > > //the upload URL should come back from the RPC call > > controller.getUploadURL("/index") using this listener > > controller.getData().addPropertyChangeListener("uploadURL", new > > PropertyChangeListener(){ > > @Override > > public void > > propertyChange(PropertyChangeEvent > > event) { > > String path = null; > > if (event.getNewValue()!= null){ > > path = (String ) > > event.getNewValue(); > > Window.alert("Upload URL: > > "+path); > > form.setAction(path); > > form.submit(); > > } > > } > > }); > > panel.add(btnAddImage); > > panel.add(btnUpload); > > // Add an event handler to the form. > > form.addFormHandler(new FormHandler() { > > @Override > > public void onSubmit(FormSubmitEvent event) { > > } > > public void onSubmitComplete(SubmitCompleteEvent event) > > { > > Window.alert(event.getResults()); > > } > > @Override > > public void onSubmitComplete(FormSubmitCompleteEvent > > event) { > > // TODO Auto-generated method stub > > Window.alert(event.getResults()); > > } > > }); > > // Add a 'submit' button. > > panel.add(new Button( "Submit", new ClickListener() { > > public void onClick(Widget sender) { > > form.submit(); > > } > > })); > > }//end constructor > > @Override > > public void hide() { > > RootPanel.get("content").clear(); > > } > > @Override > > public void propertyChange(PropertyChangeEvent event) { > > // TODO Auto-generated method stub > > } > > @Override > > public void show() { > > // TODO Auto-generated method stub > > //String text = > > String title = null; > > HTML htmlTitle = new HTML(); > > if (controller.getData().getProperty() != null){ > > title = "<p class='accTitle'>Add Images to > > the > > Property</p>"; > > //set the value inside Name like "propertyID: > > 12345"; > > txtPropertyID.setName("propertyID"); > > txtPropertyName.setName("propertyName"); > > txtPropertyID.setText(controller.getData().getProperty().getId()+""); > > txtPropertyName.setText(controller.getData().getProperty().getName()); > > txtPropertyID.setVisible(false); > > txtPropertyName.setVisible(false); > > panel.add(txtPropertyID); > > panel.add(txtPropertyName); > > } > > htmlTitle.setHTML(title); > > RootPanel.get("content").clear(); > > RootPanel.get("content").add(htmlTitle); > > // RootPanel.get("content").add(description); > > RootPanel.get("content").add(form); > > Cerrado.getInstance().getTopLinks().show(); > > } > > private String getUploadURL(){ > > return null; > > } > > > > } > > > > //Client Controller class: > > public class Controller { > > private CerradoData data = null; > > private DataAccessServiceAsync service = null; > > private String source = null; > > public Controller (CerradoData data){ > > this.data = data; > > this.service = GWT.create(DataAccessService.class); > > } > > //some omitted code ... > > public void getUploadURL(String path) { > > AsyncCallback<String> callback = new AsyncCallback<String>() > > { > > public void onFailure(Throwable caught) { > > data.setMessage(caught.getMessage()); > > // data.firePropertyChange(null); > > System.out.println(caught.getStackTrace()); > > } > > public void onSuccess(String result) { > > data.fireUploadURLChange(result); > > System.out.println("upload path: "+ result); > > } > > }; > > // Make the call to the service. > > service.getUploadURL(path, callback); > > > > }//end of getUploadURL > > > > //RPC Server class: > > public class DataAccessServiceImpl extends RemoteServiceServlet > > implements DataAccessService{ > > private PersistenceManager pm; > > private static DataAccessServiceImpl instance; > > public DataAccessServiceImpl(){ > > pm = PMF.get().getPersistenceManager(); > > instance = this; > > } > > public static DataAccessServiceImpl getInstance(){ > > if (instance == null){ > > instance = new DataAccessServiceImpl(); > > } > > return instance; > > } > > //some omitted code ... > > public String getUploadURL(String successPath){ > > BlobstoreService service = > > BlobstoreServiceFactory.getBlobstoreService(); > > return service.createUploadUrl(successPath); > > > > } > > > > -- > > You received this message because you are subscribed to the Google Groups > "Google Web Toolkit" group. > > To post to this group, send email to [email protected] > . > > To unsubscribe from this group, send email to > [email protected]<google-web-toolkit%[email protected]> > . > > For more options, visit this group athttp:// > groups.google.com/group/google-web-toolkit?hl=en. > > -- > You received this message because you are subscribed to the Google Groups > "Google Web Toolkit" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]<google-web-toolkit%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/google-web-toolkit?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
