How to fix "java.lang.IllegalStateException: Not a JSON Array" when creating an OnlineMeeting using Java SDK ?

mz-0180 10 Points de réputation
2024-04-15T11:53:07.98+00:00

Hello everyone,

I am trying to upgrade my Microsoft Graph SDK to create Teams meetings. Here is the previous code (for microsoft-graph 3.0.0) :

public WrapperVO<Object> generateTeamsUrl(MultipartFormDataInput dates) throws BusinessException, TechnicalException{
		WrapperVO<Object> wVO = new WrapperVO<Object>();
		List<String> scopes = new ArrayList<>();
		String clientSecret = //retrieved in database
		scopes.add("https://graph.microsoft.com/.default");
		String meetingStart = null;
		String meetingEnd = null;
		try {
			meetingStart = dates.getFormDataPart("meetingStart", String.class, null);
			meetingEnd = dates.getFormDataPart("meetingEnd", String.class, null);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		final ClientSecretCredential clientSecretCredential = new ClientSecretCredentialBuilder()
		        .clientId("")
		        .clientSecret(clientSecret)
		        .tenantId("")
		        .build();

		final TokenCredentialAuthProvider tokenCredentialAuthProvider = new TokenCredentialAuthProvider(clientSecretCredential);
		
		GraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider(tokenCredentialAuthProvider).buildClient();

		OnlineMeeting onlineMeeting = new OnlineMeeting();
		onlineMeeting.startDateTime = OffsetDateTime.parse(meetingStart);
		onlineMeeting.endDateTime = OffsetDateTime.parse(meetingEnd);
		onlineMeeting.subject = "Meeting";

		OnlineMeeting createdMeeting = graphClient.users("").onlineMeetings().buildRequest().post(onlineMeeting);
		System.out.println("OnlineMeeting URL: " + createdMeeting.joinWebUrl);
		
		Response resp = Response.ok(createdMeeting.joinWebUrl).build();

		return new WrapperVO<>(wVO.addData(resp), new MetaDataVO());
    }

and the new one (microsoft-graph 6.0.x)

public WrapperVO<Object> generateTeamsUrl(MultipartFormDataInput dates) throws BusinessException, TechnicalException{
    WrapperVO<Object> wVO = new WrapperVO<Object>();
    String[] scopes = new String[] { "https://graph.microsoft.com/.default" };
    String clientSecret = //in database
    String meetingStart = null;
    String meetingEnd = null;
    try {
       meetingStart = dates.getFormDataPart("meetingStart", String.class, null);
       meetingEnd = dates.getFormDataPart("meetingEnd", String.class, null);
    } catch (IOException e) {
       e.printStackTrace();
    }
    
    final ClientSecretCredential clientSecretCredential = new ClientSecretCredentialBuilder()
            .clientId("")
            .clientSecret(clientSecret)
            .tenantId("")
            .build();
    
    GraphServiceClient graphClient = new GraphServiceClient(clientSecretCredential, scopes);
    OnlineMeeting onlineMeeting = new OnlineMeeting();
    onlineMeeting.setStartDateTime(OffsetDateTime.parse(meetingStart));
    onlineMeeting.setEndDateTime(OffsetDateTime.parse(meetingEnd));
    onlineMeeting.setSubject("Meeting");
    OnlineMeeting createdMeeting = graphClient.users().byUserId("").onlineMeetings()
          .post(onlineMeeting);
    System.out.println("OnlineMeeting URL: " + createdMeeting.getJoinWebUrl());
    
    Response resp = Response.ok(createdMeeting.getJoinWebUrl()).build();
    return new WrapperVO<>(wVO.addData(resp), new MetaDataVO());
   }

However, I encounter the following error when trying to use post():

Caused by: java.lang.IllegalStateException: Not a JSON Array: {"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#users('')/onlineMeetings/$entity","id":"","creationDateTime":"2024-04-15T11:23:24.1567614Z","startDateTime":"2024-04-16T10:11:00Z","endDateTime":"2024-04-16T11:11:00Z","joinUrl":"https://teams.microsoft.com/l/meetup-join/19%3ameeting_MjgyY2Y","meetingCode":"","isBroadcast":false,"autoAdmittedUsers":"everyoneInCompany","outerMeetingAutoAdmittedUsers":null,"capabilities":[],"externalId":null,"iCalUid":null,"meetingType":null,"meetingsMigrationMode":null,"joinWebUrl":"https://teams.microsoft.com/l/meetup-join/19%3ameeting_","subject":"Meeting","videoTeleconferenceId":null,"isEntryExitAnnounced":true,"allowedPresenters":"everyone","allowAttendeeToEnableMic":true,"allowAttendeeToEnableCamera":true,"allowMeetingChat":"enabled","shareMeetingChatHistoryDefault":"none","allowTeamworkReactions":true,"anonymizeIdentityForRoles":[],"recordAutomatically":false,"allowParticipantsToChangeName":false,"allowTranscription":true,"allowRecording":true,"meetingTemplateId":null,"broadcastSettings":null,"meetingInfo":null,"audioConferencing":null,"watermarkProtection":null,"chatRestrictions":null,"participants":{"organizer":{"upn":"","role":"presenter","identity":{"application":null,"device":null,"user":{"id":"","displayName":null,"tenantId":"","identityProvider":"AAD"}}},"attendees":[]},"chatInfo":{"threadId":"19:meeting_","messageId":"0","replyChainMessageId":null},"joinInformation":{"content":"data:text/html","contentType":"html"},"joinMeetingIdSettings":{"isPasscodeRequired":false,"joinMeetingId":"38","passcode":null},"lobbyBypassSettings":{"scope":"organization","isDialInBypassEnabled":false}} at com.google.gson.JsonElement.getAsJsonArray(JsonElement.java:117) at com.microsoft.kiota.serialization.JsonParseNode.iterateOnArray(JsonParseNode.java:167) at com.microsoft.kiota.serialization.JsonParseNode.getUntypedValue(JsonParseNode.java:245) at com.microsoft.kiota.serialization.JsonParseNode.tryGetAnything(JsonParseNode.java:317) at com.microsoft.kiota.serialization.JsonParseNode.assignFieldValues(JsonParseNode.java:299) at com.microsoft.kiota.serialization.JsonParseNode.getObjectValue(JsonParseNode.java:213) at com.microsoft.kiota.http.OkHttpRequestAdapter.send(OkHttpRequestAdapter.java:296) at com.microsoft.graph.users.item.onlinemeetings.OnlineMeetingsRequestBuilder.post(OnlineMeetingsRequestBuilder.java:120)

I haven't found any information about this issue on the forum and documentation, do you have a workaround ?

Thank you

Azure
Azure
Plateforme et infrastructure de cloud computing pour la génération, le déploiement et la gestion d’applications et de services à travers un réseau mondial de centres de données gérés par Microsoft.
141 questions
0 commentaires Aucun commentaire
{count} votes

1 réponse

Trier par : Le plus utile
  1. Alexis Thorez (CONCENTRIX CORPORATION) 6 780 Points de réputation Fournisseur Microsoft
    2024-04-16T07:52:30.4566667+00:00

    Bonjour mz-0180,

    L'erreur "java.lang.IllegalStateException: Not a JSON Array" suggère que la méthode attend un tableau JSON, mais qu'à la place, un objet JSON est fourni.

    Cela pourrait être dû à un changement dans le format de réponse attendu dans la version la plus récente du SDK. Le SDK Microsoft Graph a subi des modifications importantes, notamment des mises à jour des espaces de noms, des méthodes d'authentification et des générateurs de requêtes. Il est important de vous assurer que votre code est aligné sur ces changements.

    Vous trouverez plus d'informations dans les deux articles suivant:

    Voici une version révisée de votre code avec le SDK mis à jour:

    public WrapperVO<Object> generateTeamsUrl(MultipartFormDataInput dates) throws BusinessException, TechnicalException {
        WrapperVO<Object> wVO = new WrapperVO<Object>();
        String[] scopes = new String[] { "https://graph.microsoft.com/.default" };
        String clientSecret = //retrieved from database
        String meetingStart = null;
        String meetingEnd = null;
        try {
           meetingStart = dates.getFormDataPart("meetingStart", String.class, null);
           meetingEnd = dates.getFormDataPart("meetingEnd", String.class, null);
        } catch (IOException e) {
           e.printStackTrace();
        }
        
        final ClientSecretCredential clientSecretCredential = new ClientSecretCredentialBuilder()
                .clientId("")
                .clientSecret(clientSecret)
                .tenantId("")
                .build();
        
        GraphServiceClient graphClient = GraphServiceClient.builder()
                .authenticationProvider(new TokenCredentialAuthProvider(scopes, clientSecretCredential))
                .buildClient();
        
        OnlineMeeting onlineMeeting = new OnlineMeeting();
        onlineMeeting.setStartDateTime(OffsetDateTime.parse(meetingStart));
        onlineMeeting.setEndDateTime(OffsetDateTime.parse(meetingEnd));
        onlineMeeting.setSubject("Meeting");
        
        // Use try-catch to handle the potential IllegalStateException
        try {
            OnlineMeeting createdMeeting = graphClient.users().byUserId("").onlineMeetings()
                  .buildRequest()
                  .post(onlineMeeting);
            System.out.println("OnlineMeeting URL: " + createdMeeting.joinWebUrl);
            
            Response resp = Response.ok(createdMeeting.joinWebUrl).build();
            return new WrapperVO<>(wVO.addData(resp), new MetaDataVO());
        } catch (IllegalStateException e) {
            e.printStackTrace();
            // Handle the error or rethrow it
            throw e;
        }
    }
    
    
    
    
    

    A bientôt

    Alexis

    Si cette réponse a répondu à votre question, veuillez « Accepter comme réponse » et voter en utilisant « Pouce levé » afin que la pertinence de ce message s’améliore lorsque quelqu’un dans la communauté recherche une requête similaire.

    1 personne a trouvé cette réponse utile.