This is an automated email from the ASF dual-hosted git repository.
crazyhzm pushed a commit to branch 3.3
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.3 by this push:
new c8f7269e41 Fix method annotation compile failed in native (#13490)
c8f7269e41 is described below
commit c8f7269e41b6f509cfb14a45334521bd15a0944c
Author: huazhongming <[email protected]>
AuthorDate: Tue Dec 12 17:54:32 2023 +0800
Fix method annotation compile failed in native (#13490)
Signed-off-by: crazyhzm <[email protected]>
---
.../java/org/apache/dubbo/config/AbstractInterfaceConfig.java | 11 +++++++++++
.../src/main/java/org/apache/dubbo/config/MethodConfig.java | 3 +--
.../apache/dubbo/config/spring/aot/AotWithSpringDetector.java | 6 ++++++
.../factory/annotation/ServiceAnnotationPostProcessor.java | 9 ++++++++-
4 files changed, 26 insertions(+), 3 deletions(-)
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
index 53b3eadb35..fe25f46f1e 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
@@ -27,6 +27,7 @@ import org.apache.dubbo.common.utils.Assert;
import org.apache.dubbo.common.utils.ClassUtils;
import org.apache.dubbo.common.utils.CollectionUtils;
import org.apache.dubbo.common.utils.ConfigUtils;
+import org.apache.dubbo.common.utils.JsonUtils;
import org.apache.dubbo.common.utils.ReflectUtils;
import org.apache.dubbo.common.utils.StringUtils;
import org.apache.dubbo.config.support.Parameter;
@@ -758,6 +759,16 @@ public abstract class AbstractInterfaceConfig extends
AbstractMethodConfig {
this.methods = (methods != null) ? new ArrayList<>(methods) : null;
}
+ public void setMethodsJson(List<String> methodsJson) {
+ if (methodsJson != null) {
+ this.methods = new ArrayList<>();
+ methodsJson.forEach(
+ (methodConfigJson) ->
methods.add(JsonUtils.toJavaObject(methodConfigJson, MethodConfig.class)));
+ } else {
+ this.methods = null;
+ }
+ }
+
public void addMethod(MethodConfig methodConfig) {
if (this.methods == null) {
this.methods = new ArrayList<>();
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/config/MethodConfig.java
b/dubbo-common/src/main/java/org/apache/dubbo/config/MethodConfig.java
index 000b447cac..7cdc83db9b 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/MethodConfig.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/MethodConfig.java
@@ -217,9 +217,8 @@ public class MethodConfig extends AbstractMethodConfig {
List<String> prefixes = new ArrayList<>();
prefixes.add(parentPrefix + "." + this.getName());
return prefixes;
- } else {
- throw new IllegalStateException("The parent prefix of MethodConfig
is null");
}
+ return null;
}
@Override
diff --git
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/aot/AotWithSpringDetector.java
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/aot/AotWithSpringDetector.java
index 3bda2719d0..1ee9ef3f2e 100644
---
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/aot/AotWithSpringDetector.java
+++
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/aot/AotWithSpringDetector.java
@@ -30,6 +30,8 @@ public abstract class AotWithSpringDetector {
*/
public static final String AOT_ENABLED = "spring.aot.enabled";
+ private static final String AOT_PROCESSING = "spring.aot.processing";
+
/**
* Determine whether AOT optimizations must be considered at runtime. This
* is mandatory in a native image but can be triggered on the JVM using
@@ -40,4 +42,8 @@ public abstract class AotWithSpringDetector {
public static boolean useGeneratedArtifacts() {
return (NativeDetector.inNativeImage() ||
SpringProperties.getFlag(AOT_ENABLED));
}
+
+ public static boolean isAotProcessing() {
+ return (NativeDetector.inNativeImage() ||
SpringProperties.getFlag(AOT_PROCESSING));
+ }
}
diff --git
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationPostProcessor.java
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationPostProcessor.java
index ddfc9424da..0c0af139cd 100644
---
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationPostProcessor.java
+++
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationPostProcessor.java
@@ -21,6 +21,7 @@ import org.apache.dubbo.common.logger.ErrorTypeAwareLogger;
import org.apache.dubbo.common.logger.LoggerFactory;
import org.apache.dubbo.common.utils.AnnotationUtils;
import org.apache.dubbo.common.utils.ClassUtils;
+import org.apache.dubbo.common.utils.JsonUtils;
import org.apache.dubbo.common.utils.ReflectUtils;
import org.apache.dubbo.common.utils.StringUtils;
import org.apache.dubbo.config.Constants;
@@ -486,7 +487,13 @@ public class ServiceAnnotationPostProcessor
// Add methods parameters
List<MethodConfig> methodConfigs =
convertMethodConfigs(serviceAnnotationAttributes.get("methods"));
if (!methodConfigs.isEmpty()) {
- builder.addPropertyValue("methods", methodConfigs);
+ if (AotWithSpringDetector.isAotProcessing()) {
+ List<String> methodsJson = new ArrayList<>();
+ methodConfigs.forEach(methodConfig ->
methodsJson.add(JsonUtils.toJson(methodConfig)));
+ builder.addPropertyValue("methodsJson", methodsJson);
+ } else {
+ builder.addPropertyValue("methods", methodConfigs);
+ }
}
// convert provider to providerIds