microsoftgraph / microsoftgraph/msgraph-sdk-java
SDK NullPointerException due to missing @odata.type field during select query
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Java
- Estrellas
- 444
- Forks
- 154
- Merge medio
- 18 h 28 min
- PR fusionados (30 d)
- 4
Descripción
Describe the bug
During a select query for users, mapping them to the User class fails with following NPE
java.lang.NullPointerException: parameter node cannot be null
at java.util.Objects.requireNonNull(Objects.java:246)
at io.kiota.serialization.json.JsonParseNode.<init>(JsonParseNode.java:38)
at io.kiota.serialization.json.JsonParseNodeFactory.createJsonParseNode(JsonParseNodeFactory.java:32)
at io.kiota.serialization.json.JsonParseNode.getChildNode(JsonParseNode.java:48)
at com.microsoft.graph.models.User.createFromDiscriminatorValue(User.java:30)
at io.kiota.serialization.json.JsonParseNode.getObjectValue(JsonParseNode.java:248)
at io.kiota.serialization.json.JsonParseNode.getCollectionOfObjectValues(JsonParseNode.java:219)
at com.microsoft.graph.models.UserCollectionResponse.lambda$getFieldDeserializers$0(UserCollectionResponse.java:34)
at io.kiota.serialization.json.JsonParseNode.assignFieldValues(JsonParseNode.java:301)
at io.kiota.serialization.json.JsonParseNode.getObjectValue(JsonParseNode.java:249)
at com.microsoft.kiota.http.OkHttpRequestAdapter.send(OkHttpRequestAdapter.java:322)
at com.microsoft.graph.groups.item.members.graphuser.GraphUserRequestBuilder.get(GraphUserRequestBuilder.java:70)
Expected behavior
The user(s) should be selected by the query, mapped and returned in a response object
How to reproduce
Code snippet to reproduce:
final String groupId = "test group id";
final GraphUserRequestBuilder request = client.groups()
.byGroupId(groupId)
.members()
.graphUser()
.get(req -> {
req.queryParameters.select = "id,name,mail";
req.queryParameters.filter = "id in (1,2,3)";
req.queryParameters.count = true;
req.headers.add("ConsistencyLevel", "eventual");
}
})
Code snippet to reproduce the NPE with the JsonNode
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
import io.kiota.serialization.json.JsonParseNode;
import io.kiota.serialization.json.JsonParseNodeFactory;
class Scratch {
static void main() {
try {
var a = new JsonParseNode(new JsonParseNodeFactory(), new ObjectNode(new JsonNodeFactory(false)));
var b = a.getChildNode("@odata.type");
} catch (NullPointerException e) {
System.out.println("Exception!");
}
}
}
Replicating this code in Graph UI returns following example response:
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users(id,name,mail)",
"@odata.count": 2,
"value": [
{
"id": "id 1",
"name": "name 1",
"mail": "mail 1"
},
{
"id": "id 2",
"name": "name 2",
"mail": "mail 2"
}
]
}
Which then leads to the NPE as the SDK is expecting @odata.type field being set here
@jakarta.annotation.Nonnull
public static User createFromDiscriminatorValue(@jakarta.annotation.Nonnull final ParseNode parseNode) {
Objects.requireNonNull(parseNode);
final ParseNode mappingValueNode = parseNode.getChildNode("@odata.type"); <- NPE being caused here
if (mappingValueNode != null) {
final String mappingValue = mappingValueNode.getStringValue();
switch (mappingValue) {
case "#microsoft.graph.agentUser": return new AgentUser();
}
}
return new User();
}
SDK Version
6.63.0
Latest version known to work for scenario above?
6.62.0
Known Workarounds
No response
Debug output
Click to expand log
```</details>
### Configuration
_No response_
### Other information
_No response_
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con User.createFromDiscriminatorValue en src/main/java/com/microsoft/graph/generated/models/User.java y sigue JsonParseNode.getChildNode para el campo @odata.type que falta. Reproduce el problema con la consulta select o el fragmento de JsonNode proporcionado y, después, verifica que los usuarios que contienen únicamente id, name y mail se mapeen y se devuelvan sin una NullPointerException.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- java
- Área
- api
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Tranquilo
- Claridad
- Bastante claro
- Aptitud para principiantes
- 68/100