4

I'm in code of a project. I got a error when I try to convert a object RRREC type into RR_REC type.

The RRREC class:

 public class RRREC{
    protected String owner;
    protected RRINFRATYPE infraType;
    // getter and setter
 }

The RR_REC class:

public class RR_REC{
    protected String localOwner;
    protected RR_INFRA_TYPE localInfraType;
    // getter and setter
}

The RRINFRATYPE class:

public enum RRINFRATYPE {

  V_6_ADDRESS("V6ADDRESS"),
  OBJECT("OBJECT"),
  ZONE("ZONE"),
  V_4_REVERSEZONE("V4REVERSEZONE"),
  V_6_REVERSEZONE("V6REVERSEZONE"),
  NODE("NODE"),
  ALL("ALL");
  private final String value;

  RRINFRATYPE(String v) {
     value = v;
  }

  public String value() {
    return value;
  }

  public static RRINFRATYPE fromValue(String v) {
    for (RRINFRATYPE c: RRINFRATYPE.values()) {
        if (c.value.equals(v)) {
            return c;
        }
    }
    throw new IllegalArgumentException(v);
   }
}

And the RR_INFRA_TYPE:

public class RR_INFRA_TYPE{
   protected String localRR_INFRA_TYPE;
   private static java.util.HashMap _table_ = new java.util.HashMap();

   // Constructor
   protected RR_INFRA_TYPE(String value, boolean isRegisterValue) {
    localRR_INFRA_TYPE = value;
    if (isRegisterValue) {
        _table_.put(localRR_INFRA_TYPE, this);
    }
}

When I debug code

// getMapper will return DozerBeanMapper object
// and request is a RRREC object
getMapper().map(request, RR_REC.class);

I got a error, below is stack trace

Nov 17, 2015 2:46:44 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [RESTfulServlet] in context with path [] threw exception [Request processing failed; nested exception is org.dozer.MappingException: java.lang.NoSuchMethodException: com.qip.nb.ws.RR_INFRA_TYPE.<init>()] with root cause
java.lang.NoSuchMethodException: com.qip.nb.ws.RR_INFRA_TYPE.<init>()
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.getDeclaredConstructor(Unknown Source)
at org.dozer.factory.ConstructionStrategies$ByConstructor.newInstance(ConstructionStrategies.java:257)
at org.dozer.factory.ConstructionStrategies$ByConstructor.create(ConstructionStrategies.java:245)
at org.dozer.factory.DestBeanCreator.create(DestBeanCreator.java:65)
at org.dozer.MappingProcessor.mapCustomObject(MappingProcessor.java:477)
at org.dozer.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:434)
at org.dozer.MappingProcessor.mapFromFieldMap(MappingProcessor.java:330)
at org.dozer.MappingProcessor.mapField(MappingProcessor.java:276)
at org.dozer.MappingProcessor.map(MappingProcessor.java:245)
at org.dozer.MappingProcessor.map(MappingProcessor.java:187)
at org.dozer.MappingProcessor.map(MappingProcessor.java:124)
at org.dozer.MappingProcessor.map(MappingProcessor.java:119)
at org.dozer.DozerBeanMapper.map(DozerBeanMapper.java:111)
at com.qip.nb.ws.restful.controller.RRController.buildSOAPRequest(RRController.java:488)
at com.qip.nb.ws.restful.controller.RRController.getRRs(RRController.java:374)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:776)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:858)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:151)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at com.qip.nb.ws.restful.security.AuthenticationTokenProcessingFilter.doFilter(AuthenticationTokenProcessingFilter.java:52)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
dds
  • 2,335
  • 1
  • 31
  • 45
Tam Nguyen
  • 93
  • 1
  • 3
  • 11

2 Answers2

8

Dozer normally expects a default constructor. Your class RR_INFRA_TYPE doesn't have one as you defined a constructor other than the default constructor.

To tell dozer how to instanciate your target class you have to implement a custom bean factory. There you can initialize all parameters needed for your RR_INFRA_TYPE object and this instance will be further processed/filled by dozer then.

More Info here: http://dozer.sourceforge.net/documentation/custombeanfactories.html

Aron_dc
  • 883
  • 4
  • 14
  • 1
    I had used `@AllArgsConstructor` annotation from _lombok_ on my view class. when i added `@NoArgsConstructor`, error fixed. Thanks for your answer. – Ali Sohrabi May 17 '19 at 07:33
2

I got the same error using Dozer with an inner class written for a JUnit test. Nothing I tried would make this error go away (Lombok @NoArgConstructor, explicit default constructor, fully qualified class names, accessor levels, etc).

Only thing that fixed it was moving the inner classes to their own explicit Class files. That resolved the problem immediately despite any combination of the previous changes.

So if you find yourself in the same situation and all else fails, you can fall back on that.

Marquee
  • 1,776
  • 20
  • 21
  • That's weird. In my case with an inner class, only in that, I have added the Lombok NoArgsConstructor and AllArgsConstructor. And works without any issue – Sebastian Farias Dec 10 '19 at 13:50
  • Sebastian Farias, I agree it makes no sense - hence the "if all else fails" qualifier. Glad it worked for you - if anyone else know why it would fail on JUnit with Inner Classes and/or has a solution, I'd love to hear it. – Marquee Dec 29 '20 at 02:28