`
flamezealot
  • 浏览: 20043 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

一个dubbo 异常

 
阅读更多

以下是异常信息

Caused by: javax.validation.ValidationException: HV000183: Unable to initialize 'javax.el.ExpressionFactory'. Check that you have the EL dependencies on the classpath, or use ParameterMessageInterpolator instead
	at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.buildExpressionFactory(ResourceBundleMessageInterpolator.java:102) ~[hibernate-validator-5.4.1.Final.jar:5.4.1.Final]
	at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.<init>(ResourceBundleMessageInterpolator.java:45) ~[hibernate-validator-5.4.1.Final.jar:5.4.1.Final]
	at org.hibernate.validator.internal.engine.ConfigurationImpl.getDefaultMessageInterpolator(ConfigurationImpl.java:423) ~[hibernate-validator-5.4.1.Final.jar:5.4.1.Final]
	at org.hibernate.validator.internal.engine.ConfigurationImpl.getDefaultMessageInterpolatorConfiguredWithClassLoader(ConfigurationImpl.java:575) ~[hibernate-validator-5.4.1.Final.jar:5.4.1.Final]
	at org.hibernate.validator.internal.engine.ConfigurationImpl.getMessageInterpolator(ConfigurationImpl.java:364) ~[hibernate-validator-5.4.1.Final.jar:5.4.1.Final]
	at org.hibernate.validator.internal.engine.ValidatorFactoryImpl.<init>(ValidatorFactoryImpl.java:148) ~[hibernate-validator-5.4.1.Final.jar:5.4.1.Final]
	at org.hibernate.validator.HibernateValidator.buildValidatorFactory(HibernateValidator.java:38) ~[hibernate-validator-5.4.1.Final.jar:5.4.1.Final]
	at org.hibernate.validator.internal.engine.ConfigurationImpl.buildValidatorFactory(ConfigurationImpl.java:331) ~[hibernate-validator-5.4.1.Final.jar:5.4.1.Final]
	at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:110) ~[validation-api-1.1.0.Final.jar:na]
	at com.alibaba.dubbo.validation.support.jvalidation.JValidator.<init>(JValidator.java:89) ~[dubbo-2.5.7.jar:2.5.7]
	at com.alibaba.dubbo.validation.support.jvalidation.JValidation.createValidator(JValidation.java:31) ~[dubbo-2.5.7.jar:2.5.7]
	at com.alibaba.dubbo.validation.support.AbstractValidation.getValidator(AbstractValidation.java:38) ~[dubbo-2.5.7.jar:2.5.7]
	at com.alibaba.dubbo.validation.Validation$Adaptive.getValidator(Validation$Adaptive.java) ~[dubbo-2.5.7.jar:2.5.7]
	at com.alibaba.dubbo.validation.filter.ValidationFilter.invoke(ValidationFilter.java:47) ~[dubbo-2.5.7.jar:2.5.7]
	at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:69) ~[dubbo-2.5.7.jar:2.5.7]
	at com.alibaba.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:75) ~[dubbo-2.5.7.jar:2.5.7]
	at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:69) ~[dubbo-2.5.7.jar:2.5.7]
	at com.alibaba.dubbo.rpc.protocol.dubbo.filter.FutureFilter.invoke(FutureFilter.java:54) ~[dubbo-2.5.7.jar:2.5.7]
	at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:69) ~[dubbo-2.5.7.jar:2.5.7]
	at com.alibaba.dubbo.rpc.filter.ConsumerContextFilter.invoke(ConsumerContextFilter.java:48) ~[dubbo-2.5.7.jar:2.5.7]
	at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:69) ~[dubbo-2.5.7.jar:2.5.7]
	at com.alibaba.dubbo.rpc.listener.ListenerInvokerWrapper.invoke(ListenerInvokerWrapper.java:74) ~[dubbo-2.5.7.jar:2.5.7]
	at com.alibaba.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java:53) ~[dubbo-2.5.7.jar:2.5.7]
	at com.alibaba.dubbo.rpc.cluster.support.FailoverClusterInvoker.doInvoke(FailoverClusterInvoker.java:77) ~[dubbo-2.5.7.jar:2.5.7]

 

本地测试一个facade的时候遇到这个异常,然而百思不得其解的是,测试另一个facade的时候又不会报这个错,调试了很久,有种想砸电脑的冲动。终于冷静下来之后,决定一个一个的看这些filter做了啥,最后看到了ValidationFilter这里

 if (validation != null && !invocation.getMethodName().startsWith("$")
                && ConfigUtils.isNotEmpty(invoker.getUrl().getMethodParameter(invocation.getMethodName(), Constants.VALIDATION_KEY))) {
            try {
                Validator validator = validation.getValidator(invoker.getUrl());
                if (validator != null) {
                    validator.validate(invocation.getMethodName(), invocation.getParameterTypes(), invocation.getArguments());
                }
            } catch (RpcException e) {
                throw e;
            } catch (Throwable t) {
                throw new RpcException(t.getMessage(), t);
            }
        }
        return invoker.invoke(invocation);

 看到if这一串,就想会不会是另一个facade不满足这个if条件呢,好吧,前两个条件都不满足,最后一个,url里包含validation参数,对比了一下,果然原因在这里,前一个facade的url里有validation=true,后一个没有,奶奶个熊啊,你们全都是辣鸡。。。

 

 知道原因就好了,解决是很简单的,dependency里加入javax.el的jar包,就行了。还有更简单的方法,@Reference注解里设置validation="false",嘿嘿

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics