Skip to main content
Question

NullPointerException on BoxFolder.Info method after folder creation

  • May 22, 2025
  • 7 replies
  • 13 views

Forum|alt.badge.img

I am able to successfully create a folder, however whenever I try to call getIsExternallyOwned() I get a NullPointerException. All other getters work as expected. The token I am passing with the requestBody is a Developer Token.

 

BoxFolder parentFolder = new BoxFolder(
BoxApiBuilder.getInstance(requestBody.getToken()),
requestBody.getParent().getId()
);

String folderInfoJson = new BoxUtility().convertBoxObjectToJson(parentFolder.createFolder(requestBody.getName()));

The convertBoxObjectToJson method: 

public String convertBoxObjectToJson(BoxResource.Info folderInfo){
ObjectMapper objectMapper = ObjectMapperBuilder.getInstance();

try{
return objectMapper.writeValueAsString(folderInfo);
}

catch(Exception e){
throw new RuntimeException(e);
}
}

Error:

java.lang.NullPointerException: null
at com.box.sdk.BoxFolder$Info.getIsExternallyOwned(BoxFolder.java:1392) ~[box-java-sdk-2.41.0.jar:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_232]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_232]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_232]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_232]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:688) ~[jackson-databind-2.9.8.jar:2.9.8]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:719) ~[jackson-databind-2.9.8.jar:2.9.8]
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) ~[jackson-databind-2.9.8.jar:2.9.8]
at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:119) ~[jackson-databind-2.9.8.jar:2.9.8]
at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:79) ~[jackson-databind-2.9.8.jar:2.9.8]
at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:18) ~[jackson-databind-2.9.8.jar:2.9.8]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:727) ~[jackson-databind-2.9.8.jar:2.9.8]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:719) ~[jackson-databind-2.9.8.jar:2.9.8]
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) ~[jackson-databind-2.9.8.jar:2.9.8]
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480) ~[jackson-databind-2.9.8.jar:2.9.8]
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319) ~[jackson-databind-2.9.8.jar:2.9.8]
at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:3905) ~[jackson-databind-2.9.8.jar:2.9.8]
at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3219) ~[jackson-databind-2.9.8.jar:2.9.8]
at com.usaa.ent.ecsm.api.boxutility.BoxUtility.convertBoxObjectToJson(BoxUtility.java:12) ~[classes/:na]
at com.usaa.ent.ecsm.api.folders.BoxFoldersServiceImpl.createFolder(BoxFoldersServiceImpl.java:29) ~[classes/:na]
at com.usaa.ent.ecsm.api.folders.FoldersController.createFolder(FoldersController.java:64) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_232]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_232]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_232]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_232]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) ~[tomcat-embed-core-9.0.17.jar:9.0.17]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[tomcat-embed-core-9.0.17.jar:9.0.17]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.17.jar:9.0.17]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.17.jar:9.0.17]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.17.jar:9.0.17]

 

7 replies

Forum|alt.badge.img

 where is the code that calls getIsExternallyOwned?


Forum|alt.badge.img

The objectmapper uses the getters to convert the object into a JSON string.


Forum|alt.badge.img

Could you try running the code without the object mapper first? Create the folder, and then try and print out the getIsExternallyOwned value? If that doesn't thrown an error then we know something weird is happening when using the object mapper.


Forum|alt.badge.img

I did try running getIsExternallyOwned() by itself and I got the same NullPointerException. 


Forum|alt.badge.img

I believe the issue is that to get that field you need to pass in is_externally_owned to get the fields parameter. It is not part of the standard object returned. So you have to use this method public BoxFolder.Info getInfo(String... fields) . An example of how to use this method can be found here. If you want to get all the field for a folder so you don't have any issues iterating, I would pass in the ALL_FIELDS variable found here.


Forum|alt.badge.img

It appears the problem seems to be in the SDK.

 

The variable, isExternallyOwned, is of type Boolean (Object), whereas the getter returns a boolean (primitive). If the variable is null, it will return a NullPointerException. 

 

From Java SDK 2.41.0

 

public class Info extends BoxItem.Info {
private BoxUploadEmail uploadEmail;
private boolean hasCollaborations;
private SyncState syncState;
private EnumSet permissions;
private boolean canNonOwnersInvite;
private boolean isWatermarked;
private boolean isCollaborationRestrictedToEnterprise;
private Boolean isExternallyOwned; // This is the only one that is an object
private Map, Map, Metadata>> metadataMap;
private List allowedSharedLinkAccessLevels;
private List allowedInviteeRoles;

/*This returns a primitive boolean*/
public boolean getIsExternallyOwned(){
return this.isExternallyOwned;
}

 


Forum|alt.badge.img

Either way, that getInfo method is a perfect workaround. Thank you so much!