From d9cfe4bbb5f816f6503398a2e245e5b3e4d44380 Mon Sep 17 00:00:00 2001 From: TheEterna <125226601+TheEterna@users.noreply.github.com> Date: Wed, 18 Jun 2025 11:36:27 +0800 Subject: [PATCH] fixed: #6 this bug is that getDeclaredMethods returns an unstable list bean. getClass(). getDeclaredMethods() in the doGetClassMethods method called in provider. getLoggingConsumers(), the order of the returned method list is not fixed, so values cannot be obtained through index --- .../mcp/spring/SyncMcpAnnotationProvider.java | 10 ++++++++-- .../mcp/provider/SyncMcpLoggingConsumerProvider.java | 8 +++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/mcp-annotations-spring/src/main/java/com/logaritex/mcp/spring/SyncMcpAnnotationProvider.java b/mcp-annotations-spring/src/main/java/com/logaritex/mcp/spring/SyncMcpAnnotationProvider.java index 3469fff..f7c44a0 100644 --- a/mcp-annotations-spring/src/main/java/com/logaritex/mcp/spring/SyncMcpAnnotationProvider.java +++ b/mcp-annotations-spring/src/main/java/com/logaritex/mcp/spring/SyncMcpAnnotationProvider.java @@ -16,6 +16,8 @@ package com.logaritex.mcp.spring; import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.Comparator; import java.util.List; import java.util.function.Consumer; import java.util.function.Function; @@ -92,8 +94,12 @@ public SpringAiSyncMcpLoggingConsumerProvider(List loggingObjects) { @Override protected Method[] doGetClassMethods(Object bean) { - return ReflectionUtils - .getDeclaredMethods(AopUtils.isAopProxy(bean) ? AopUtils.getTargetClass(bean) : bean.getClass()); + Method[] methods = ReflectionUtils + .getDeclaredMethods(AopUtils.isAopProxy(bean) ? AopUtils.getTargetClass(bean) : bean.getClass()); + Arrays.sort(methods, Comparator + .comparing(Method::getName) + .thenComparing(method -> Arrays.toString(method.getParameterTypes()))); + return methods; } } diff --git a/mcp-annotations/src/main/java/com/logaritex/mcp/provider/SyncMcpLoggingConsumerProvider.java b/mcp-annotations/src/main/java/com/logaritex/mcp/provider/SyncMcpLoggingConsumerProvider.java index 10961f0..025bc76 100644 --- a/mcp-annotations/src/main/java/com/logaritex/mcp/provider/SyncMcpLoggingConsumerProvider.java +++ b/mcp-annotations/src/main/java/com/logaritex/mcp/provider/SyncMcpLoggingConsumerProvider.java @@ -17,6 +17,8 @@ package com.logaritex.mcp.provider; import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.Comparator; import java.util.List; import java.util.function.Consumer; import java.util.stream.Stream; @@ -103,7 +105,11 @@ public List> getLoggingConsumers() { * @return the methods of the bean class */ protected Method[] doGetClassMethods(Object bean) { - return bean.getClass().getDeclaredMethods(); + Method[] methods = bean.getClass().getDeclaredMethods(); + Arrays.sort(methods, Comparator + .comparing(Method::getName) + .thenComparing(method -> Arrays.toString(method.getParameterTypes()))); + return methods; } }