Pouton Gerald
Pouton Gerald

Reputation: 1625

getting 500 from Blobstore

Here is a bulleted list of events:

So I cannot get blob keys to my datastore.

code to do http post myImage is a byte array:

HttpClient httpClient = new DefaultHttpClient();
        HttpPost postRequest = new HttpPost(url);
        MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
        try {
             reqEntity.addPart("title", new StringBody(title));
        reqEntity.addPart("caption", new StringBody(caption));
            ByteArrayBody myBlob = new ByteArrayBody(myImage, "myImage.png");
            reqEntity.addPart("myBlob", myBlob);
            ByteArrayBody secBlob = new ByteArrayBody(secBlobImage, "secBlobImage.png");
            reqEntity.addPart("secBlob", secBlob);
        } catch (Exception e) {
            e.printStackTrace();
        }
        postRequest.setEntity(reqEntity);
        try {
            HttpResponse response = httpClient.execute(postRequest);
            System.out.println("RESPONSE CODE::: " + response.getStatusLine().getStatusCode());
            System.out.println("REASON CODE::: " + response.getStatusLine().getReasonPhrase());
        } catch (Exception e) {
            e.printStackTrace();
        }

After android initiates the call to the blobstore, I get the following rant from logCat:

04-30 00:59:15.922: I/APACHE HTTP (thCr=4674) - NafHttpAuthStrategyDefault(8796): (thUse=4674) NafHttpAuthStrategyDefault()
04-30 00:59:15.922: I/APACHE HTTP (thCr=4674) - KeeperManager(8796): (thUse=4674) INITIALIZATION of shared resources
04-30 00:59:15.922: I/APACHE HTTP (thCr=4674) - AndroidContextProviderImpl(8796): (thUse=4674)    currentActivityThread=null
04-30 00:59:15.930: I/APACHE HTTP (thCr=4674) - GbaSupportIndicatorRequestUpdaterDefault(8796): (thUse=4674) GbaSupportIndicatorRequestUpdaterAbstract()   userHeaderPredefined=Apache-HttpClient/UNAVAILABLE (java 1.4)
04-30 00:59:15.946: I/APACHE HTTP (thCr=4674) - NafHttpAuthStrategyDefault(8796): (thUse=4674)    cached value : gbaSupportIsPossible=null
04-30 00:59:15.946: I/APACHE HTTP (thCr=4674) - NafHttpAuthStrategyDefault(8796): (thUse=4674)    The current context is NOT a context of GBA service.
04-30 00:59:15.946: I/APACHE HTTP (thCr=4674) - GbaSupportPermissionRequestCheckerImpl(8796): (thUse=4674) isCurrentProcessRequestedGba()#finished   result=false
04-30 00:59:15.946: I/APACHE HTTP (thCr=4674) - GbaSupportPermissionRequestCheckerImpl(8796): (thUse=4674) isCurrentProcessAllowedToUseGba()#started   result=false
04-30 00:59:15.946: I/APACHE HTTP (thCr=4674) - NafHttpAuthStrategyDefault(8796): (thUse=4674)    The GBA permission wasn't requested for this process.
04-30 00:59:15.954: I/APACHE HTTP (thCr=4674) - NafHttpAuthStrategyDefault(8796): (thUse=4674) It is impossible to support GBA now (many possible reasons: no Android Context, current client is GBA service, etc.), then it will be just usual HTTP.
04-30 00:59:15.954: I/APACHE HTTP (thCr=4674) - NafRequestExecutorWrapperRedirectionHandler(8796): (thUse=4674)    It isn't GBA flow, redirection responses are not handled.
04-30 00:59:20.688: I/APACHE HTTP (thCr=4674) - NafHttpAuthStrategyDefault(8796): (thUse=4674)    cached value : gbaSupportIsPossible=false
04-30 00:59:20.688: I/System.out(8796): RESPONSE CODE::: 500
04-30 00:59:20.696: I/System.out(8796): REASON CODE::: Internal Server Error

EDIT:

Many thanks to @Teshte and @ShivanRaptor for the question. I assumed my server was not being hit. But their question made me realize that indeed it was. So when I look at the server log, I find that there is a java.lang.NullPointerException at BlobKey titleKey = blobs.get("title").get(0) in the following code. The NPE occurs on the element that android is sending as StringBody. I haven't figured how to fix the NPE yet.

Code:

public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
        Map<String, List<BlobKey>> blobs = blobstoreService.getUploads(req);
        BlobKey titleKey = blobs.get("title").get(0);
…

res.sendRedirect("/");
}

Upvotes: 2

Views: 260

Answers (1)

Pouton Gerald
Pouton Gerald

Reputation: 1625

I am sending all the objects as ByteArrayBody instead of encoding some as StringBody.

Upvotes: 1

Related Questions