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]. > 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]. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
