microsoftgraph / microsoftgraph/msgraph-sdk-java

SDK returns site `name` inconsistently: sometimes same as `displayName` instead of correct value and sometimes the correct value

Open
#2,345 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

status:waiting-for-triage type:bug
Dominant language
Java
Stars
444
Forks
154
Avg merge
18h 28m
Merged PRs (30d)
4

Description

Describe the bug

Doing different site lists returns different values in the name field.

Doing a search limited to a smaller set of sites returns the correct / expected value in the name field.

Doing a list of all sites returns the displayName in the name field.

Expected behavior

The SDK should return values in the name field consistently.

How to reproduce
  1. Return sites using this code:
graphClient.sites().get()

The return value in the MSGraph API response is:

{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#sites",
  "value": [
    {
      "createdDateTime": "2025-03-31T16:03:30Z",
      "id": "mytenant.sharepoint.com,d0536e25-0c9c-4a9c-b879-cefdc46dc82d,9f7ed8fa-4175-4a6c-80ae-2e19f19f5948",
      "name": "Test Site Many Names Site Info Name",
      "webUrl": "https://mytenant.sharepoint.com/sites/TestSiteManyNames",
      "displayName": "Test Site Many Names Site Info Name",
      "isPersonalSite": false,
      "siteCollection": {
        "hostname": "mytenant.sharepoint.com"
      },
      "root": {}
    },
    {
      "createdDateTime": "2025-02-23T17:46:07Z",
      "id": "mytenant.sharepoint.com,c65bebd0-1a50-4d31-8ef8-51d067f95ca8,00577abf-eccb-44ae-ba22-1542cc3249e3",
      "name": "Apps",
      "webUrl": "https://mytenant.sharepoint.com/sites/appcatalog",
      "displayName": "Apps",
      "isPersonalSite": false,
      "siteCollection": {
        "hostname": "mytenant.sharepoint.com"
      },
      "root": {}
    },
    {
      "createdDateTime": "2025-02-20T01:38:39Z",
      "id": "mytenant.sharepoint.com,09ed6654-3505-4561-a2e7-8d2776480abb,4d074863-0c38-46e8-b60a-156446947967",
      "name": "Team Site",
      "webUrl": "https://mytenant.sharepoint.com/sites/contentTypeHub",
      "displayName": "Team Site",
      "isPersonalSite": false,
      "siteCollection": {
        "hostname": "mytenant.sharepoint.com"
      },
      "root": {}
    },
    {
      "createdDateTime": "2025-02-20T01:38:32Z",
      "id": "mytenant.sharepoint.com,ff2ad436-8677-4cfb-91d6-67d7344474a0,9fda6e4f-a65f-4cc1-ba2b-3d11d30dccd7",
      "webUrl": "https://mytenant.sharepoint.com/search",
      "isPersonalSite": false,
      "siteCollection": {
        "hostname": "mytenant.sharepoint.com"
      },
      "root": {}
    },
    {
      "createdDateTime": "2025-02-20T01:37:56Z",
      "id": "mytenant-my.sharepoint.com,5a898f19-31d7-4f38-abd7-d7342535cb7d,6baab3c4-1e9a-4c52-bf5d-49f46471726d",
      "name": "My Name",
      "webUrl": "https://mytenant-my.sharepoint.com/personal/myid_mytenant_com",
      "displayName": "My Name",
      "isPersonalSite": true,
      "siteCollection": {
        "hostname": "mytenant-my.sharepoint.com"
      },
      "root": {}
    },
    {
      "createdDateTime": "2025-02-20T01:35:31Z",
      "id": "mytenant.sharepoint.com,e24ba8dd-ec64-4930-b9d3-6a4a542d4114,e69c54e0-3df2-4d80-a2f9-48f75cc5a825",
      "name": "All Company",
      "webUrl": "https://mytenant.sharepoint.com/sites/allcompany",
      "displayName": "All Company",
      "isPersonalSite": false,
      "siteCollection": {
        "hostname": "mytenant.sharepoint.com"
      },
      "root": {}
    },
    {
      "createdDateTime": "2025-02-20T01:32:07Z",
      "id": "mytenant.sharepoint.com,e3bb292d-6bce-419a-8f50-c98b996d3b34,965c6dcd-d66f-4f05-b23a-5274bd961199",
      "name": "Communication site",
      "webUrl": "https://mytenant.sharepoint.com/",
      "displayName": "Communication site",
      "isPersonalSite": false,
      "siteCollection": {
        "hostname": "mytenant.sharepoint.com"
      },
      "root": {}
    }
  ]
}
  1. Return just one of the above sites, example here is the one with "Many" in the display name (Kotlin):
graphClient.sites().get {
  it.queryParameters.search = "Many"
}

and the return value in the MSGraph API response is now:

{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#sites",
  "value": [
    {
      "createdDateTime": "2025-03-31T16:03:30Z",
      "description": "Test Site Many Names Description",
      "id": "mytenant.sharepoint.com,d0536e25-0c9c-4a9c-b879-cefdc46dc82d,9f7ed8fa-4175-4a6c-80ae-2e19f19f5948",
      "lastModifiedDateTime": "2025-03-31T16:03:38Z",
      "name": "TestSiteManyNames",
      "webUrl": "https://mytenant.sharepoint.com/sites/TestSiteManyNames",
      "displayName": "Test Site Many Names Site Info Name",
      "root": {},
      "siteCollection": {
        "hostname": "mytenant.sharepoint.com"
      }
    }
  ]
}

Note the difference in the Name fields. The first response contains "name": "Test Site Many Names Site Info Name" while the second response contains "name": "TestSiteManyNames".

Note also that the second response does not contain isPersonalSite: false (even if isPersonalSite is requested explicitly via $select).

SDK Version

6.33.0

Latest version known to work for scenario above?

No response

Known Workarounds

Extract the last path segment from the webUrl field to get the name consistently, after filtering out the root site.

Debug output

No response

Configuration

No response

Other information

No response

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at the graphClient.sites().get() entry point and compare how the SDK represents the two captured Microsoft Graph responses, including name and isPersonalSite. Use the reported list and search responses to define the expected consistency; done means the SDK exposes stable values for both fields or clearly documents an upstream limitation.

Written by the indexing model from the issue text.

Assessment

Tech stack
java, kotlin
Domain
api, backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.