জাভ্যাক্স.এলডেশন


103

হাইবারনেট ভ্যালিডেটর সহ আমি খুব সাধারণ অ্যাপ্লিকেশনটি লেখার চেষ্টা করি:

আমার পদক্ষেপগুলি:

pom.xML এ নিম্নলিখিত নির্ভরতা যুক্ত করুন:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.1.1.Final</version>
</dependency>

কোড লিখুন:

class Configuration {
    Range(min=1,max=100)
    int threadNumber;
    //...

    public static void main(String[] args) {
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();

        Validator validator = factory.getValidator();

        Configuration configuration = new Configuration();
        configuration.threadNumber = 12;
            //...

        Set<ConstraintViolation<Configuration>> constraintViolations = validator.validate(configuration);
        System.out.println(constraintViolations);

    }
}

এবং আমি নিম্নলিখিত স্ট্যাকট্রেস পেয়েছি:

Exception in thread "main" javax.validation.ValidationException: Unable to instantiate Configuration.
    at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:279)
    at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:110)
    ...
    at org.hibernate.validator.internal.engine.ConfigurationImpl.<init>(ConfigurationImpl.java:110)
    at org.hibernate.validator.internal.engine.ConfigurationImpl.<init>(ConfigurationImpl.java:86)
    at org.hibernate.validator.HibernateValidator.createGenericConfiguration(HibernateValidator.java:41)
    at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:276)
    ... 2 more

আমি কী ভুল করছি?


1
5.2.4.Finalআমার কাছে সমস্যার সমাধান করতে হাইবারনেট-বৈধকরণকারী আপগ্রেড করা।
fracz

1
@ ফ্রেজ আমার হাইবারনেট-ভ্যালিডেটর = 5.2.4.Finalএবং ব্যতিক্রমটি এখনও আছে।
আলফোনসো নিশিকাওয়া

উত্তর:


154

pom.xmlনিম্নলিখিত নির্ভরতা যুক্ত করার পরে এটি কাজ করছে :

<dependency>
   <groupId>javax.el</groupId>
   <artifactId>javax.el-api</artifactId>
   <version>2.2.4</version>
</dependency>
<dependency>
   <groupId>org.glassfish.web</groupId>
   <artifactId>javax.el</artifactId>
   <version>2.2.4</version>
</dependency>

হাইবারনেট ভ্যালিডেটর দিয়ে শুরু করা :

হাইবারনেট ভ্যালিডেটরকেও সীমাবদ্ধতা লঙ্ঘন বার্তায় গতিশীল অভিব্যক্তিগুলি মূল্যায়নের জন্য ইউনিফাইড এক্সপ্রেশন ল্যাঙ্গুয়েজ ( জেএসআর 341 ) প্রয়োগকরণ প্রয়োজন । আপনার অ্যাপ্লিকেশনটি যখন কোনও জাভা ইই পাত্রে যেমন ওয়াইল্ডফ্লাইতে চলছে তখন একটি EL বাস্তবায়ন ইতিমধ্যে ধারক দ্বারা সরবরাহ করা হয়। একটি জাভা এসই পরিবেশে, তবে আপনাকে আপনার POM ফাইলে নির্ভরতা হিসাবে একটি প্রয়োগ যুক্ত করতে হবে। উদাহরণস্বরূপ আপনি JSR 341 রেফারেন্স বাস্তবায়নটি ব্যবহার করতে নিম্নলিখিত দুটি নির্ভরতা যুক্ত করতে পারেন :

<dependency>
   <groupId>javax.el</groupId>
   <artifactId>javax.el-api</artifactId>
   <version>2.2.4</version>
</dependency>
<dependency>
   <groupId>org.glassfish.web</groupId>
   <artifactId>javax.el</artifactId>
   <version>2.2.4</version>
</dependency>

5
বিনের বৈধকরণ 1.1 এর ক্লাসপাথে এক্সপ্রেশন ভাষার নির্ভরতা প্রয়োজন। হাইবারনেট.আর.ওয়েডিয়েটর
হার্ডি

1
<d dependency> <groupId> org.glassfish.web </groupId> <artifactId> javax.el </artifactId> <version> ২.২.৪ </version> <scope> রানটাইম </ translation> </d dependency> হিসাবে যথেষ্ট হাইবারনেট বৈধকারক ইতিমধ্যে javax.el-api
মেভেরা

8
<dependency><groupId>javax.el</groupId><artifactId>javax.el-api</artifactId><version>2.3.1</version></dependency>আমার জন্য যথেষ্ট ছিল
18-22

1
<d dependency> <groupId> javax.el </groupId> <artifactId> el-api </artifactId> <version> 2.2 </version> </d dependency> আমার সমস্যার সমাধান করেছে।
zhy2002

3
দেখে মনে হচ্ছে তারা এসই পরিবেশের জন্য গিথুব পৃষ্ঠায় উভয়কেই সুপারিশ করে: github.com/hibernate/hibernate-uthorator । শীর্ষটি যদিও আমার পক্ষে যথেষ্ট ছিল।
vphilipnyc

56

ঠিক কর

<dependency>
   <groupId>javax.el</groupId>
   <artifactId>javax.el-api</artifactId>
   <version>2.2.4</version>
</dependency>

8
কেন hibernate-validatorসেই নির্ভরতার উপর নির্ভর করে না ?
thomas.mc.work

কেন জানি না তবে এটি আরও ভাল হবে
ব্রুনো লি

@ থমাস.এমসি.ওয়ার্ক আমি মনে করি ট্রানজিটিভ নির্ভরতার সমস্যাগুলি এড়াতে চাই
gstackoverflow

1
এটি আসলে পম ফাইলে নির্ভরতা হিসাবে চিহ্নিত হয়েছে তবে প্রদত্ত বিবিধ সুযোগের সাথে। এর অর্থ হ'ল যদি আপনার জাভাই সার্ভার আপনার জন্য সরবরাহ না করে তবে আপনি নিজেকে যুক্ত করতে দায়বদ্ধ।
বাস্তব_পল

এই সমাধানটি আমার পক্ষে কার্যকর হয়নি, আমি হাইবারনেট ভ্যালিডেটর 6.0.4 এবং জাভা.এল 3.0.0 সংস্করণ ব্যবহার করছি এবং আমি ওয়েবলজিক ব্যবহার করছি। কেউ দয়া করে আমাকে সাহায্য করতে পারেন .. হাতের অগ্রিম সাহায্য করার জন্য প্রশংসা
কুশওয়াহা

18

যদি আপনি টমক্যাটটিকে আপনার সার্ভার রানটাইম হিসাবে ব্যবহার করেন এবং আপনি পরীক্ষায় এই ত্রুটিটি পান (কারণ টমক্যাট রানটাইম পরীক্ষার সময় পাওয়া যায় না) গ্লাস ফিশের পরিবর্তে টমক্যাট এল রানটাইমকে অন্তর্ভুক্ত করা বুদ্ধিমান হয়ে থাকে)। এই হবে:

    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-el-api</artifactId>
        <version>8.5.14</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-jasper-el</artifactId>
        <version>8.5.14</version>
        <scope>test</scope>
    </dependency>

আমি তোমায় ভালোবাসি. হ্যাঁ.
xdmoore

এখনো তোমাকে ভালবাসি. দেখে মনে হচ্ছে আপনি কেবল tomcat-jasper-elনির্ভরতা অন্তর্ভুক্ত করতে পারেন , যেহেতু এটি tomcat-el-apiনির্ভর করে অন্তর্নিহিতভাবে নির্ভরতা অন্তর্ভুক্ত করে ।
xdmoore

13

যদি আপনি শুরু সঙ্গে বসন্ত বুট ব্যবহার করেন - এই নির্ভরতা উভয় tomcat-embed-elএবং hibernate-validatorনির্ভরতা যোগ করে :

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

13

যদি আপনার জাভ্যাক্স.এল না প্রয়োজন (উদাহরণস্বরূপ একটি জাভাসি অ্যাপ্লিকেশনটিতে), হাইবারনেট যাচাইকারী থেকে প্যারামিটারমেসেজআইন্টারপ্লোলার ব্যবহার করুন । হাইবারনেট ভ্যালিডেটর হ'ল স্ট্যান্ডলোন উপাদান, যা হাইবারনেট ছাড়াই ব্যবহার করা যায় নিজেই যায়।

হাইবারনেট-বৈধকারীর উপর নির্ভরশীল

<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-validator</artifactId>
   <version>6.0.16.Final</version>
</dependency>

প্যারামিটারমেসেজআইন্টারপ্লোলার ব্যবহার করুন

import javax.validation.Validation;
import javax.validation.Validator;
import org.hibernate.validator.messageinterpolation.ParameterMessageInterpolator;

private static final Validator VALIDATOR =
  Validation.byDefaultProvider()
    .configure()
    .messageInterpolator(new ParameterMessageInterpolator())
    .buildValidatorFactory()
    .getValidator();

হ্যাঁ, আমি আরও নির্ভরতা যুক্ত করতে চাই না। ভাল কাজ
nokieng

ওহ, লাইব্রেরি প্রকল্পগুলির জন্য এটি আমার পক্ষে সত্যিই একটি ভাল উত্তর।
জিন কোওন

এটি নির্বাচিত উত্তর হওয়া উচিত।
anataliocs


4

স্প্রিং বুট ব্যবহার করা হলে এটি ভাল কাজ করে। এমনকি বসন্ত প্রতিক্রিয়াশীল মঙ্গো সঙ্গে।

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

এবং বৈধতা কনফিগারেশন:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.mapping.event.ValidatingMongoEventListener;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;

@Configuration
public class MongoValidationConfig {

    @Bean
    public ValidatingMongoEventListener validatingMongoEventListener() {
        return new ValidatingMongoEventListener(validator());
    }

    @Bean
    public LocalValidatorFactoryBean validator() {
        return new LocalValidatorFactoryBean();
    }
}

2

এসবিটি-র জন্য, নীচের সংস্করণগুলি ব্যবহার করুন

val glassfishEl = "org.glassfish" % "javax.el" % "3.0.1-b09"

val hibernateValidator = "org.hibernate.validator" % "hibernate-validator" % "6.0.17.Final"

val hibernateValidatorCdi = "org.hibernate.validator" % "hibernate-validator-cdi" % "6.0.17.Final"

1

প্রতি হাইবারনেট ভ্যালিডেটার দিয়ে শুরু হচ্ছে ডকুমেন্টেশন, একটি এক্সপ্রেশন ভাষা (এল) বাস্তবায়ন প্রদান করা প্রয়োজন। একটি জাভা EE পরিবেশে, এটি ধারক দ্বারা সরবরাহ করা হবে। তবে আপনার নিজের মতো একটি স্বতন্ত্র অ্যাপ্লিকেশনটিতে এটি সরবরাহ করা প্রয়োজন।

হাইবারনেট ভ্যালিডেটরকে সীমাবদ্ধতা লঙ্ঘন বার্তায় গতিশীল অভিব্যক্তিগুলি মূল্যায়নের জন্য ইউনিফাইড এক্সপ্রেশন ল্যাঙ্গুয়েজ (জেএসআর 341) এর একটি প্রয়োগকরণও প্রয়োজন।

আপনার অ্যাপ্লিকেশনটি যখন কোনও জাভা ইই পাত্রে যেমন ওয়াইল্ডফ্লাইতে চলছে তখন একটি EL বাস্তবায়ন ইতিমধ্যে ধারক দ্বারা সরবরাহ করা হয়।

একটি জাভা এসই পরিবেশে, তবে আপনাকে আপনার POM ফাইলে নির্ভরতা হিসাবে একটি প্রয়োগ যুক্ত করতে হবে। উদাহরণস্বরূপ, আপনি JSR 341 রেফারেন্স বাস্তবায়নটি ব্যবহার করতে নিম্নলিখিত নির্ভরতা যুক্ত করতে পারেন:

<dependency>
  <groupId>org.glassfish</groupId>
  <artifactId>javax.el</artifactId>
  <version></version>
</dependency>

ডকুমেন্টেশন এর নির্ভরতা উদাহরণ একটু অভিব্যক্তি ভাষা হিসেবে, তারিখ হচ্ছে জাকার্তা ই ই প্রকল্পে স্থানান্তর 2018 সালে অভিব্যক্তি ভাষার জাকার্তা ই ই সংস্করণ ব্যবহার করতে, নিম্নলিখিত যোগ অন্ধকার গ্লাসফিস এল নির্ভরতা:

<dependency>
   <groupId>org.glassfish</groupId>
   <artifactId>jakarta.el</artifactId>
   <version>3.0.3</version>
</dependency>

অন্যান্য ইএল বাস্তবায়ন রয়েছে যা গ্লাস ফিশ ব্যতীত অন্য ব্যবহৃত হতে পারে। উদাহরণস্বরূপ, স্প্রিং বুট ডিফল্টরূপে এমবেডড টমক্যাট ব্যবহার করে । EL এর এই সংস্করণটি নীচে ব্যবহার করা যেতে পারে:

<dependency>
   <groupId>org.apache.tomcat.embed</groupId>
   <artifactId>tomcat-embed-el</artifactId>
   <version>9.0.30</version>
</dependency>

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.