Using the Java SDK I'm trying to upload a test file but getting the below API exception
Exception in thread "main" com.box.sdk.BoxAPIException: The API returned an error code: 400
at com.box.sdk.BoxAPIResponse.(BoxAPIResponse.java:70)
at com.box.sdk.BoxJSONResponse.(BoxJSONResponse.java:30)
at com.box.sdk.BoxAPIRequest.trySend(BoxAPIRequest.java:435)
at com.box.sdk.BoxAPIRequest.send(BoxAPIRequest.java:221)
at com.box.sdk.BoxAPIRequest.send(BoxAPIRequest.java:196)
at com.box.sdk.BoxFolder.uploadFile(BoxFolder.java:468)
at com.box.sdk.BoxFolder.uploadFile(BoxFolder.java:415)
at com.mc.invoicer.boxpoc.BoxFileUpload.uploadFile(BoxFileUpload.java:76)
at com.mc.invoicer.boxpoc.BoxFileUpload.main(BoxFileUpload.java:48)
I'm able to successfully authenticate the user and also create a folder but unable to upload a file. Below is my Java code
public static void main(String[] args) throws Exception {
String path = new File("").getAbsolutePath();
Reader reader = new FileReader(path.concat("/").concat("src/main/resources/config.json"));
BoxConfig boxConfig = BoxConfig.readFrom(reader);
JWTEncryptionPreferences encryptionPref = new JWTEncryptionPreferences();
encryptionPref.setPublicKeyID(boxConfig.getJWTEncryptionPreferences().getPublicKeyID());
encryptionPref.setPrivateKey(boxConfig.getJWTEncryptionPreferences().getPrivateKey());
encryptionPref.setPrivateKeyPassword(boxConfig.getJWTEncryptionPreferences().getPrivateKeyPassword());
encryptionPref.setEncryptionAlgorithm(EncryptionAlgorithm.RSA_SHA_256);
IAccessTokenCache accessTokenCache = new InMemoryLRUAccessTokenCache(MAX_CACHE_ENTRIES);
BoxDeveloperEditionAPIConnection api = BoxDeveloperEditionAPIConnection.getAppEnterpriseConnection(
boxConfig.getEnterpriseId(), boxConfig.getClientId(), boxConfig.getClientSecret(), encryptionPref, accessTokenCache);
BoxUser.Info userInfo = BoxUser.getCurrentUser(api).getInfo();
System.out.format("Welcome, %s!\n\n", userInfo.getName());
BoxFolder rootFolder = BoxFolder.getRootFolder(api);
Iterable infoIterable = rootFolder.getChildren();
Iterator iterator = infoIterable.iterator();
while (iterator.hasNext()) {
BoxItem.Info info = iterator.next();
if (info instanceof BoxFolder.Info) {
BoxFolder.Info folderInfo = (BoxFolder.Info) info;
uploadFile(path.concat("/").concat(FILE), api, folderInfo.getResource());
}
System.out.println("Item name is " + info.getName());
}
System.out.println("folder owner: " + rootFolder.getInfo().getOwnedBy().getName());
}
private static String uploadFile(String pathFileName, BoxAPIConnection api, BoxFolder folder) {
boolean fileExists = false;
String fileId = null;
try {
String fileName = pathFileName.substring(pathFileName.lastIndexOf("/")+1, pathFileName.length());
for (BoxItem.Info itemInfo : folder) {
if (itemInfo instanceof BoxFile.Info) {
BoxFile.Info fileInfo = (BoxFile.Info) itemInfo;
if (fileName.equals(fileInfo.getName())) {
fileExists = true;
fileId = fileInfo.getID();
}
}
}
if (!fileExists) {
System.out.println("uploading new file: " + fileName);
FileInputStream stream = new FileInputStream(pathFileName);
BoxFile.Info boxInfo = folder.uploadFile(stream, pathFileName);
fileId = boxInfo.getID();
stream.close();
}
else {
System.out.println("uploading new version of file: " + fileName);
BoxFile file = new BoxFile(api, fileId);
FileInputStream stream = new FileInputStream(pathFileName);
file.uploadVersion(stream);
stream.close();
}
}
catch (IOException e) {
System.out.println(e);
}
return fileId;
}
}