microsoftgraph / microsoftgraph/msgraph-sdk-java
ClassCastException while uploading content to OneDrive using Graph API
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 444
- Forks
- 154
- Avg merge
- 18h 28m
- Merged PRs (30d)
- 4
Description
Describe the bug
We are trying to upload content to OneDrive root and getting following error consistently.
java.lang.ClassCastException: class java.io.BufferedInputStream cannot be cast to class com.microsoft.graph.models.extensions.UploadSession (java.io.BufferedInputStream is in module java.base of loader 'bootstrap'; com.microsoft.graph.models.extensions.UploadSession is in unnamed module of loader 'app')
at com.ptc.cloudstorage.onedrive.OneDriveStorageService$1.success(OneDriveStorageService.java:103)
at com.microsoft.graph.concurrency.DefaultExecutors$1.run(DefaultExecutors.java:92)
at com.microsoft.graph.concurrency.SynchronousExecutor.execute(SynchronousExecutor.java:45)
at com.microsoft.graph.concurrency.DefaultExecutors.performOnForeground(DefaultExecutors.java:89)
at com.microsoft.graph.http.CoreHttpProvider$1.run(CoreHttpProvider.java:155)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Expected behavior
Upload should work as expected.
How to reproduce
try {
IAuthenticationProvider authProvider = new AuthenticationProvider(accessToken);
// Build a Graph client
final IGraphServiceClient graphServiceClient = GraphServiceClient.builder()
.authenticationProvider(authProvider)
.buildClient();
final BlockingQueue queue = new LinkedBlockingQueue<>(1);
DriveItemUploadableProperties itemProperties = new DriveItemUploadableProperties();
graphServiceClient
.me()
.drive()
.root()
.itemWithPath(escapeSpace(filename))
.createUploadSession(itemProperties)
.buildRequest()
.post(new ICallback() {
@Override
public void failure(final ClientException ex) {
logger.error("createUploadSession.failure: Error occured durring post " + ex);
if (logger.isTraceEnabled()) {
ex.printStackTrace();
}
try {
queue.put("");
} catch (InterruptedException ie) {
}
}
@Override
public void success(final UploadSession result) {
if (logger.isDebugEnabled()) {
logger.debug("createUploadSession.success: UploadSession= " + result);
}
try {
ChunkedUploadProvider<DriveItem> chunkedUploadProvider = new ChunkedUploadProvider<DriveItem>(
result, graphServiceClient, inputStream, streamSize, DriveItem.class);
chunkedUploadProvider.upload(new IProgressCallback<DriveItem>() {
@Override
public void failure(ClientException ce) {
logger.error("failure: Error occured durring upload " + ce);
if (logger.isTraceEnabled()) {
ce.printStackTrace();
}
try {
queue.put("");
} catch (InterruptedException ie) {
}
}
@Override
public void success(DriveItem driveItem) {
if (logger.isDebugEnabled()) {
logger.debug("success: driveItem = " + driveItem);
}
try {
queue.put(driveItem.webUrl);
} catch (InterruptedException ie) {
}
}
@Override
public void progress(long current, long max) {
if (logger.isDebugEnabled()) {
logger.debug("progress: current=" + current + ", max=" + max);
}
}
}, new int[] { finalChunkSize });
} catch (Exception e) {
logger.error("Exception occured in upload to One Drive", e);
try {
queue.put("");
} catch (InterruptedException ie) {
}
}
SDK Version
microsoft-graph-core 1.0.9 microsoft-graph 1.9.0
Latest version known to work for scenario above?
No response
Known Workarounds
No response
Debug output
Click to expand log
```</details>
### Configuration
_No response_
### Other information
_No response_
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the reproduced createUploadSession call and the ClassCastException at OneDriveStorageService.java:103, using microsoft-graph 1.9.0 and microsoft-graph-core 1.0.9. Verify why the callback receives a BufferedInputStream instead of an UploadSession; done means the same upload flow completes without the cast failure.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- api, cloud
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 30/100