2012-06-04 10 views
7

मेरे पास वसंत के साथ एकीकृत आरईएसटी सेवा परियोजना है। मैं बीन सत्यापन को एकीकृत करने की कोशिश कर रहा हूं। मैं एक कस्टम एनोटेशन किया है: के साथ
@Constraint (validatedBy = {} INotEmptyValidator.class)

/** 
    * Denotes a field as being no empty. 
    * 
    * @author pguzun 
    */ 
@Target({METHOD, FIELD, ANNOTATION_TYPE}) 
@Retention(RUNTIME) 
@Constraint(validatedBy = {INotEmptyValidator.class}) 
public @interface NotEmpty { 

    Error error() default Error.ServerError; 

    String message() default "{error.notEmpty}"; 

    Class<?>[] groups() default {}; 

    Class<? extends Payload>[] payload() default {}; 
} 


मैं सत्यापनकर्ता इंटरफेस निर्दिष्ट।
यह वैधकर्ता कार्यान्वयन है।

/** 
    * Checks that a String is not empty. 
    * 
    * @see StringUtils#isEmpty(java.lang.CharSequence) 
    * @author pguzun 
    */ 
@Component 
public class NotEmptyValidatorImpl implements INotEmptyValidator { 


@Override 
public void initialize(NotEmpty notEmpty) { 
    // NOTHING TO DO 
} 

@Override 
public boolean isValid(String value, ConstraintValidatorContext context) { 
    return !StringUtils.isEmpty(value); 
} 
} 

मैं एक कस्टम सत्यापनकर्ता बाधा फैक्टरी

/** 
    * Is custom an {@link ConstraintValidatorFactory }. Engine for defining factory 
    * methods for {@link ConstraintValidator}'s. 
    * 
    * @author pguzun 
    */ 
    public class NeoSpringConstraintValidatorFactory implements ConstraintValidatorFactory, ApplicationContextAware { 

     private ApplicationContext applicationContext; 

     public NeoSpringConstraintValidatorFactory() { 
     } 

     @Override 
     public <T extends ConstraintValidator<?, ?>> T getInstance(Class<T> key) { 
      Map<String, T> beansByNames = applicationContext.getBeansOfType(key); 
      if (beansByNames.isEmpty()) { 
       try { 
        return key.newInstance(); 
       } catch (InstantiationException e) { 
        throw new RuntimeException("Could not instantiate constraint validator class '" + key.getName() + "'", e); 
       } catch (IllegalAccessException e) { 
        throw new RuntimeException("Could not instantiate constraint validator class '" + key.getName() + "'", e); 
       } 
      } 
      if (beansByNames.size() > 1) { 
       throw new RuntimeException("Only one bean of type '" + key.getName() + "' is allowed in the application context"); 
      } 
      return (T) beansByNames.values().iterator().next(); 
     } 

     @Override 
     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 
      Assert.notNull(applicationContext, "applicationContext can not be null"); 
      this.applicationContext = applicationContext; 
     } 
    } 

कर किया था और इस

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" > 
    <property name="constraintValidatorFactory" ref="constraintValidatorFactory"/> 
</bean> 
<bean id="constraintValidatorFactory" class="com...NeoSpringConstraintValidatorFactory" > 
</bean> 

जब मैं एक सेम एक क्षेत्र इस तरह टिप्पणी किए गए है पर सेवा में आह्वान को मान्य है जैसे कि यह कॉन्फ़िगर किया गया

/** 
* The User's value object definition 
* 
* @author pguzun 
*/ 
@XmlRootElement() 
@XmlAccessorType(XmlAccessType.FIELD) 
public class UserVO { 

    @XmlElement 
    private long id; 
    @NotEmpty(error = Error.EmailVoid) 
    private String email; 

मैं

SEVERE: Servlet.service() for servlet jersey-serlvet threw exception 
    javax.validation.ValidationException: HV000032: Unable to initialize com.backend.rest.validation.validator.NotEmptyValidatorImpl. 
     at org.hibernate.validator.internal.engine.ConstraintTree.initializeConstraint(ConstraintTree.java:450) 
     at org.hibernate.validator.internal.engine.ConstraintTree.createAndInitializeValidator(ConstraintTree.java:352) 
     at org.hibernate.validator.internal.engine.ConstraintTree.getInitializedValidator(ConstraintTree.java:334) 
     at org.hibernate.validator.internal.engine.ConstraintTree.validateConstraints(ConstraintTree.java:155) 
     at org.hibernate.validator.internal.engine.ConstraintTree.validateConstraints(ConstraintTree.java:125) 
     at org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:86) 
     at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:442) 
     at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:387) 
     at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:351) 
     at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:303) 
     at org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:133) 
     at org.springframework.validation.beanvalidation.SpringValidatorAdapter.validate(SpringValidatorAdapter.java:194) 
     at com.backend.rest.UserResourceImpl.validateGuest(UserResourceImpl.java:100) 
     at com.backend.rest.UserResourceImpl.register(UserResourceImpl.java:77) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60) 
     at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185) 
     at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) 
     at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288) 
     at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) 
     at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 
     at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) 
     at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1483) 
     at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1414) 
     at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1363) 
     at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1353) 
     at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:414) 
     at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537) 
     at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:708) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
     at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:191) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) 
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
     at java.lang.Thread.run(Thread.java:662) 
    Caused by: java.lang.ClassCastException: $Proxy84 cannot be cast to com.backend.rest.validation.validator.NotEmpty 
     at com.backend.rest.validation.validator.NotEmptyValidatorImpl.initialize(NotEmptyValidatorImpl.java:18) 
     at org.hibernate.validator.internal.engine.ConstraintTree.initializeConstraint(ConstraintTree.java:447) 
     ... 49 more 
    Jun 4, 2012 1:36:57 PM org.apache.catalina.core.StandardWrapperValve invoke 
    SEVERE: Servlet.service() for servlet jersey-serlvet threw exception 
    javax.validation.ValidationException: HV000032: Unable to initialize com.backend.rest.validation.validator.NotEmptyValidatorImpl. 
     at org.hibernate.validator.internal.engine.ConstraintTree.initializeConstraint(ConstraintTree.java:450) 
     at org.hibernate.validator.internal.engine.ConstraintTree.createAndInitializeValidator(ConstraintTree.java:352) 
     at org.hibernate.validator.internal.engine.ConstraintTree.getInitializedValidator(ConstraintTree.java:334) 
     at org.hibernate.validator.internal.engine.ConstraintTree.validateConstraints(ConstraintTree.java:155) 
     at org.hibernate.validator.internal.engine.ConstraintTree.validateConstraints(ConstraintTree.java:125) 
     at org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:86) 
     at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:442) 
     at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:387) 
     at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:351) 
     at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:303) 
     at org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:133) 
     at org.springframework.validation.beanvalidation.SpringValidatorAdapter.validate(SpringValidatorAdapter.java:194) 
     at com.backend.rest.UserResourceImpl.validateGuest(UserResourceImpl.java:100) 
     at com.backend.rest.UserResourceImpl.register(UserResourceImpl.java:77) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60) 
     at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185) 
     at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) 
     at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288) 
     at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) 
     at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 
     at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) 
     at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1483) 
     at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1414) 
     at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1363) 
     at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1353) 
     at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:414) 
     at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537) 
     at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:708) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
     at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:191) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) 
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
     at java.lang.Thread.run(Thread.java:662) 
    Caused by: java.lang.ClassCastException: $Proxy84 cannot be cast to com.backend.rest.validation.validator.NotEmpty 
     at com.backend.rest.validation.validator.NotEmptyValidatorImpl.initialize(NotEmptyValidatorImpl.java:18) 
     at org.hibernate.validator.internal.engine.ConstraintTree.initializeConstraint(ConstraintTree.java:447) 
     ... 49 more 

हो और मुझे पता है java.lang.ClassCastException: $ Proxy84 Clazz में ढाला नहीं जा सकता है एक क्लासिक वसंत अपवाद है जब आप इंटरफेस का उपयोग न है, लेकिन यहाँ मैं प्रयोग करते हैं और NotEmpty सी एक एनोटेशन

कृपया बताएं कि मैं क्या गलत करता हूं? अपने व़क्त के लिए बहुत - बहुत शुक्रिया।

ps। मैं ढांचे के इस संस्करण का उपयोग

<properties> 
    <spring.version>3.1.1.RELEASE</spring.version> 
    <hibernate.version>4.1.3.Final</hibernate.version> 
    <jersey.version>1.12</jersey.version> 
    <validation.api.version>1.0.0.GA</validation.api.version> 
    <hibernate.validator.version>4.3.0.Final</hibernate.validator.version> 
+0

'NotEmptyValidatorImpl.java: 18' कैसा दिखता है? –

+0

आपकी तरह दिखने का क्या मतलब है? – pguzun

+0

सटीक रेखा मेल नहीं खाती है लेकिन NotEmptyValidatorImpl.initialize() विधि यह खाली है – pguzun

उत्तर

7

मैं इस मुद्दे पर समय बिताने के लिए आपको धन्यवाद देना चाहता हूं।
त्रुटि अन्य लागू एनोटेशन से आता है जिसमें इस बाधा वैधता है। @Constraint(validatedBy = {INotEmptyValidator.class})। यह गलती से निश्चित रूप से किया गया था।

अंततः इंटरफ़ेस के रूप में कॉन्सट्रिंट सत्यापनकर्ता @Constraint(validatedBy = {INotEmptyValidator.class}) निर्दिष्ट करने वाले बीन सत्यापन करने का यह अच्छा उदाहरण है। कार्यान्वयन NotEmptyValidatorImpl एक वसंत बीन है।

+0

का एक उदाहरण है। मैं @Component या ... MyValidator कक्षा में रखना भूल गया और इन अपवादों को मिला – Hamedz

1

अपने आयात की जांच करें। मैं तुम्हें कहीं गलती से आयातित लगता है कि यह एक: के बजाय org.hibernate.validator.constraints.NotEmpty : com.backend.rest.validation.validator.NotEmpty

+0

के साथ मेटोड की घोषणा शुरू करने के लिए धन्यवाद है, मैंने पुनः जांच की है, वे सही हैं – pguzun

0
अपने प्रश्न का

नहीं वास्तव में एक जवाब है, लेकिन आप @NotEmpty बाधा जो हाइबरनेट सत्यापनकर्ता के साथ आता है का उपयोग करने के विचार किया है?

+0

यहां नहीं है यहां यह कस्टम सत्यापन – pguzun

1

एक तरफ के रूप में, यह वही अपवाद तब होगा जब आपकी नियमित अभिव्यक्ति में वाक्यविन्यास त्रुटि हो। मैं यह जानने से पहले यहां आया कि एक वाक्यविन्यास त्रुटि मेरी समस्या थी।

आपके लिए कोई मदद नहीं है, लेकिन मैं भविष्य में गरीब आत्मा को कुछ अतिरिक्त खोज बचाने की उम्मीद कर रहा हूं।