You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2020/06/18 02:12:55 UTC

[servicecomb-java-chassis] branch master updated: [SCB-2009]dependency update: remove jakarta.el dependency and make it optional

This is an automated email from the ASF dual-hosted git repository.

liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/master by this push:
     new 279bcb8  [SCB-2009]dependency update: remove jakarta.el dependency and make it optional
279bcb8 is described below

commit 279bcb8465c9665d63ec58957eae213599bbec44
Author: liubao <bi...@qq.com>
AuthorDate: Wed Jun 17 16:57:34 2020 +0800

    [SCB-2009]dependency update: remove jakarta.el dependency and make it optional
---
 core/pom.xml                                       |  4 ---
 .../core/filter/impl/ParameterValidatorFilter.java | 19 +++++++++++
 dependencies/default/pom.xml                       |  6 ----
 .../invocation-validator/pom.xml                   |  4 ---
 .../invocation/validator/ParameterValidator.java   | 39 ++++++++++++++++------
 5 files changed, 48 insertions(+), 24 deletions(-)

diff --git a/core/pom.xml b/core/pom.xml
index bc6afae..2b34aff 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -52,10 +52,6 @@
       <groupId>org.hibernate.validator</groupId>
       <artifactId>hibernate-validator</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.glassfish</groupId>
-      <artifactId>jakarta.el</artifactId>
-    </dependency>
 
     <dependency>
       <groupId>org.jmockit</groupId>
diff --git a/core/src/main/java/org/apache/servicecomb/core/filter/impl/ParameterValidatorFilter.java b/core/src/main/java/org/apache/servicecomb/core/filter/impl/ParameterValidatorFilter.java
index 4562467..c2793ba 100644
--- a/core/src/main/java/org/apache/servicecomb/core/filter/impl/ParameterValidatorFilter.java
+++ b/core/src/main/java/org/apache/servicecomb/core/filter/impl/ParameterValidatorFilter.java
@@ -37,13 +37,20 @@ import org.apache.servicecomb.foundation.common.utils.AsyncUtils;
 import org.apache.servicecomb.swagger.engine.SwaggerProducerOperation;
 import org.apache.servicecomb.swagger.invocation.Response;
 import org.hibernate.validator.HibernateValidator;
+import org.hibernate.validator.messageinterpolation.AbstractMessageInterpolator;
+import org.hibernate.validator.messageinterpolation.ParameterMessageInterpolator;
+import org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.netflix.config.DynamicPropertyFactory;
+
 @FilterMeta(name = "validator", invocationType = PRODUCER)
 public class ParameterValidatorFilter implements Filter {
   private static final Logger LOGGER = LoggerFactory.getLogger(ParameterValidatorFilter.class);
 
+  private static final String ENABLE_EL = "servicecomb.filters.validation.useResourceBundleMessageInterpolator";
+
   private final ExecutableValidator validator;
 
   public ParameterValidatorFilter() {
@@ -51,10 +58,22 @@ public class ParameterValidatorFilter implements Filter {
         Validation.byProvider(HibernateValidator.class)
             .configure()
             .propertyNodeNameProvider(new JacksonPropertyNodeNameProvider())
+            .messageInterpolator(messageInterpolator())
             .buildValidatorFactory();
     validator = factory.getValidator().forExecutables();
   }
 
+  private AbstractMessageInterpolator messageInterpolator() {
+    if (useResourceBundleMessageInterpolator()) {
+      return new ResourceBundleMessageInterpolator();
+    }
+    return new ParameterMessageInterpolator();
+  }
+
+  private boolean useResourceBundleMessageInterpolator() {
+    return DynamicPropertyFactory.getInstance().getBooleanProperty(ENABLE_EL, false).get();
+  }
+
   @Override
   public CompletableFuture<Response> onFilter(Invocation invocation, FilterNode nextNode) {
     SwaggerProducerOperation producerOperation = invocation.getOperationMeta().getSwaggerProducerOperation();
diff --git a/dependencies/default/pom.xml b/dependencies/default/pom.xml
index 607785f..827cef3 100644
--- a/dependencies/default/pom.xml
+++ b/dependencies/default/pom.xml
@@ -96,7 +96,6 @@
     <servo.version>0.12.25</servo.version>
     <servlet-api.version>4.0.3</servlet-api.version>
     <activation.version>1.2.1</activation.version>
-    <jakarta.el.version>3.0.3</jakarta.el.version>
     <slf4j.version>1.7.26</slf4j.version>
     <snakeyaml.version>1.24</snakeyaml.version>
     <spectator.version>0.83.0</spectator.version>
@@ -567,11 +566,6 @@
         <version>${activation.version}</version>
       </dependency>
       <dependency>
-        <groupId>org.glassfish</groupId>
-        <artifactId>jakarta.el</artifactId>
-        <version>${jakarta.el.version}</version>
-      </dependency>
-      <dependency>
         <groupId>javax.annotation</groupId>
         <artifactId>javax.annotation-api</artifactId>
         <version>${javax-annotation.version}</version>
diff --git a/swagger/swagger-invocation/invocation-validator/pom.xml b/swagger/swagger-invocation/invocation-validator/pom.xml
index 2ad6bdf..d4e623d 100644
--- a/swagger/swagger-invocation/invocation-validator/pom.xml
+++ b/swagger/swagger-invocation/invocation-validator/pom.xml
@@ -35,10 +35,6 @@
       <artifactId>hibernate-validator</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.glassfish</groupId>
-      <artifactId>jakarta.el</artifactId>
-    </dependency>
-    <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
       <scope>test</scope>
diff --git a/swagger/swagger-invocation/invocation-validator/src/main/java/org/apache/servicecomb/swagger/invocation/validator/ParameterValidator.java b/swagger/swagger-invocation/invocation-validator/src/main/java/org/apache/servicecomb/swagger/invocation/validator/ParameterValidator.java
index 93c190d..4209475 100644
--- a/swagger/swagger-invocation/invocation-validator/src/main/java/org/apache/servicecomb/swagger/invocation/validator/ParameterValidator.java
+++ b/swagger/swagger-invocation/invocation-validator/src/main/java/org/apache/servicecomb/swagger/invocation/validator/ParameterValidator.java
@@ -28,6 +28,9 @@ import javax.validation.groups.Default;
 import org.apache.servicecomb.swagger.engine.SwaggerProducerOperation;
 import org.apache.servicecomb.swagger.invocation.SwaggerInvocation;
 import org.apache.servicecomb.swagger.invocation.extension.ProducerInvokeExtension;
+import org.hibernate.validator.messageinterpolation.AbstractMessageInterpolator;
+import org.hibernate.validator.messageinterpolation.ParameterMessageInterpolator;
+import org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -37,9 +40,13 @@ import com.netflix.config.DynamicPropertyFactory;
 public class ParameterValidator implements ProducerInvokeExtension {
 
   private static final Logger LOGGER = LoggerFactory.getLogger(ParameterValidator.class);
+
   private static final String PARAM_VALIDATION_ENABLED = "servicecomb.rest.parameter.validation.enabled";
+
+  private static final String ENABLE_EL = "servicecomb.filters.validation.useResourceBundleMessageInterpolator";
+
   private final DynamicBooleanProperty paramValidationEnabled = DynamicPropertyFactory.getInstance()
-          .getBooleanProperty(PARAM_VALIDATION_ENABLED, true);
+      .getBooleanProperty(PARAM_VALIDATION_ENABLED, true);
 
   public ParameterValidator() {
     paramValidationEnabled.addCallback(() -> {
@@ -54,20 +61,21 @@ public class ParameterValidator implements ProducerInvokeExtension {
   public <T> void beforeMethodInvoke(SwaggerInvocation invocation, SwaggerProducerOperation producerOperation,
       Object[] args)
       throws ConstraintViolationException {
-    if(paramValidationEnabled.get()){
+    if (paramValidationEnabled.get()) {
       if (null == executableValidator) {
         ValidatorFactory factory =
-                Validation.byDefaultProvider()
-                        .configure()
-                        .parameterNameProvider(new DefaultParameterNameProvider())
-                        .buildValidatorFactory();
+            Validation.byDefaultProvider()
+                .configure()
+                .parameterNameProvider(new DefaultParameterNameProvider())
+                .messageInterpolator(messageInterpolator())
+                .buildValidatorFactory();
         executableValidator = factory.getValidator().forExecutables();
       }
       Set<ConstraintViolation<Object>> violations =
-              executableValidator.validateParameters(producerOperation.getProducerInstance(),
-                      producerOperation.getProducerMethod(),
-                      args,
-                      Default.class);
+          executableValidator.validateParameters(producerOperation.getProducerInstance(),
+              producerOperation.getProducerMethod(),
+              args,
+              Default.class);
       if (violations.size() > 0) {
         LOGGER.warn("Parameter validation failed : " + violations.toString());
         throw new ConstraintViolationException(violations);
@@ -75,6 +83,17 @@ public class ParameterValidator implements ProducerInvokeExtension {
     }
   }
 
+  private AbstractMessageInterpolator messageInterpolator() {
+    if (useResourceBundleMessageInterpolator()) {
+      return new ResourceBundleMessageInterpolator();
+    }
+    return new ParameterMessageInterpolator();
+  }
+
+  private boolean useResourceBundleMessageInterpolator() {
+    return DynamicPropertyFactory.getInstance().getBooleanProperty(ENABLE_EL, false).get();
+  }
+
   @Override
   public int getOrder() {
     return 100;