Java 如何序列化和反序列化IGraphServiceClient对象?

Java 如何序列化和反序列化IGraphServiceClient对象?,java,microsoft-graph-api,microsoft-graph-sdks,Java,Microsoft Graph Api,Microsoft Graph Sdks,我们正在进行一个使用Microsoft Graph SDK实现Excel/OneDrive相关功能的项目。我们有一个用例,需要序列化和反序列化客户机引用/对象 我们试图反序列化对象,但得到了一个notserializableeexception异常。我们正在探索SDK并查找类,但无法在序列化/反序列化中使用它 你能帮我们解决这个问题吗 UsernamePasswordProvider authProvider= 新的UsernamePasswordProvider(clientId、作用域、用户

我们正在进行一个使用Microsoft Graph SDK实现Excel/OneDrive相关功能的项目。我们有一个用例,需要序列化和反序列化客户机引用/对象

我们试图反序列化对象,但得到了一个
notserializableeexception
异常。我们正在探索SDK并查找类,但无法在序列化/反序列化中使用它

你能帮我们解决这个问题吗

UsernamePasswordProvider authProvider=
新的UsernamePasswordProvider(clientId、作用域、用户名、密码、null、tenantid、clientSecret);
IGraphServiceClient=GraphServiceClient
.builder()
.authenticationProvider((IAAuthenticationProvider)authProvider.buildClient());

这是不可能的,坦率地说,序列化/反序列化客户端本身没有任何价值


您真正想要的是请求
offline\u访问
范围,以便在
access\u令牌
用于调用Microsoft Graph的同时收到
refresh\u令牌
。然后,您可以存储
刷新\u令牌
字符串,并使用它接收更新的/fresh
访问\u令牌
。然后,无论何时需要调用Microsoft Graph,都可以使用该令牌创建一个新的
IGraphServiceClient
实例

您可以获得IAAuthenticationProvider,如下所示

public static void main(String[] args) {
        IAuthenticationProvider authProvider =  new UsernamePasswordProvider(
                "{clientId}",
                Arrays.asList("https://graph.microsoft.com/User.Read"),
                "{userName}",
                "{password}",
                NationalCloud.Global,
                "{tenantId}",
                "{clientSecret}");

        GraphServiceClient graphClient = (GraphServiceClient) GraphServiceClient.builder()
                .authenticationProvider(authProvider)
                .buildClient();

        User user = graphClient.me().buildRequest().get();
    }
顺便说一下,如果您使用Maven安装microsoft graph auth,将会出现一些问题。目前,源代码和maven存储库之间存在不匹配。microsoft graph auth的源代码很好。因此,您可以下载msgraph sdk java auth的,并将其导出为jar文件。使用此jar文件,而不是使用com.microsoft.graph.0.1.0-SNAPSHOT。这会奏效的

另一种方法是使用Gradle安装
microsoft graph auth
。这个很好用

repository {
    jcenter()
    jcenter{
        url 'http://oss.jfrog.org/artifactory/oss-snapshot-local'
    }
}

dependency {
    // Include the sdk as a dependency
    compile('com.microsoft.graph:microsoft-graph-auth:0.1.0-SNAPSHOT')
}

这是一个类似的问题,我突然想到。希望有一个才华横溢的人,来帮助我们。谢谢你发布这个问题!我也试图克服这种情况,但在这里被绊住了。我不知道你为什么要序列化客户端本身。为了什么?客户端是无状态的,且令牌不可移植,因此您需要反序列化并请求令牌,这将大大增加开销,以完成与创建新实例相同的任务。Hi@Marclafler,是否可以存储身份验证和刷新令牌,然后使用它们创建新的IGraphServiceClient实例?Hi Marc,谢谢你帮我。我明白你关于“序列化/反序列化客户端”的观点。正如您建议使用access_令牌创建新的IGraphServiceClient实例一样,我研究了“msgraph sdk java auth”,但找不到任何AuthenticationProvider类,其构造函数接受令牌作为参数。IGraphServiceClient=GraphServiceClient.builder().authenticationProvider((IAAuthenticationProvider)authProvider.buildClient());在上面的LOC中,我需要传递一个IAAuthenticationProvider对象来构建客户机对象。是否有任何实现可用于通过令牌获取IAAuthenticationProvider实例。