microsoftgraph / microsoftgraph/msgraph-sdk-java
SDK NullPointerException due to missing @odata.type field during select query
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Java
- Star
- 444
- Fork
- 154
- Merge trung bình
- 18 giờ 28 phút
- Pull request đã merge (30 ngày)
- 4
Mô tả
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_
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu với User.createFromDiscriminatorValue trong src/main/java/com/microsoft/graph/generated/models/User.java và lần theo JsonParseNode.getChildNode đối với trường @odata.type bị thiếu. Tái hiện vấn đề bằng truy vấn select hoặc đoạn mã JsonNode được cung cấp, sau đó xác minh rằng những người dùng chỉ chứa id, name và mail được ánh xạ và trả về mà không xảy ra NullPointerException.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- java
- Lĩnh vực
- api
- Loại issue
- Lỗi
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức độ hoạt động
- Ít trao đổi
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 68/100