I'm trying to implement a function where I can get shared links to dropbox folders via API.
I was able to generate the shared link but if the link has been generated, the next call on the same folder will return this exception:
"CreateSharedLinkWithSettingsErrorException"
I tried to handle it so that I could retrieve the pre-existed shared link/URL but struggling on implementation as I got unxepcted null values, please tell me what I should change in my code, down below is my function in full:
SharedLinkMetadata sharedLinkMetadata = error.getSharedLinkAlreadyExistsValue().getMetadataValue();
"error.getSharedLinkAlreadyExistsValue()" just return null:
// function starts from here
public Optional<String> getSharedLink(String path) throws DbxException {
try {
SharedLinkSettings.Builder builder = SharedLinkSettings.newBuilder();
builder.withRequestedVisibility(RequestedVisibility.PUBLIC);
SharedLinkSettings settings = builder.build();
DbxUserSharingRequests sharingRequests = dbxClient.sharing();
SharedLinkMetadata asd = sharingRequests.createSharedLinkWithSettings(path, settings);
return Optional.of(asd.getUrl());
}
catch (DbxException e) {
if (e instanceof CreateSharedLinkWithSettingsErrorException){
CreateSharedLinkWithSettingsErrorException createSharedLinkException = (CreateSharedLinkWithSettingsErrorException) e;
CreateSharedLinkWithSettingsError error = createSharedLinkException.errorValue;
if (error.isSharedLinkAlreadyExists()) {
SharedLinkMetadata sharedLinkMetadata = error.getSharedLinkAlreadyExistsValue().getMetadataValue();
return Optional.of(sharedLinkMetadata.getUrl());
}
}
System.out.println(e.getMessage());
return Optional.empty();
}
}
here's the return objects for Exception e:
com.dropbox.core.v2.sharing.CreateSharedLinkWithSettingsErrorException: Exception in 2/sharing/create_shared_link_with_settings: {".tag":"shared_link_already_exists","shared_link_already_exists":null}
box.core.v2.sharing.CreateSharedLinkWithSettingsError.getSharedLinkAlreadyExistsValue()" is null] with root cause
java.lang.NullPointerException: Cannot invoke "com.dropbox.core.v2.sharing.SharedLinkAlreadyExistsMetadata.getMetadataValue()" because the return value of "com.dropbox.core.v2.sharing.CreateSharedLinkWithSettingsError.getSharedLinkAlreadyExistsValue()" is null
at com.powers.customers.service.DropboxClientService.getSharedLink(DropboxClientService.java:67) ~[classes/:na]
at com.powers.customers.controller.DropboxWebhookController.getSharedLink(DropboxWebhookController.java:56) ~[classes/:na]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:577) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.22.jar:5.3.22]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.22.jar:5.3.22]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.22.jar:5.3.22]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.22.jar:5.3.22]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.22.jar:5.3.22]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.22.jar:5.3.22]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1070) ~[spring-webmvc-5.3.22.jar:5.3.22]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.22.jar:5.3.22]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.22.jar:5.3.22]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.22.jar:5.3.22]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) ~[tomcat-embed-core-9.0.65.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.22.jar:5.3.22]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.65.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.65.jar:9.0.65]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.65.jar:9.0.65]