microsoftgraph / microsoftgraph/msgraph-sdk-java

SDK NullPointerException due to missing @odata.type field during select query

Abierto
#2,587 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

status:waiting-for-triage type:bug
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

https://github.com/microsoftgraph/msgraph-sdk-java/blob/main/src/main/java/com/microsoft/graph/generated/models/User.java

@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

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. 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

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.