推土机映射:NoSuchMethodException - java

我正在尝试使用推土机映射将一种类型转换为另一种类型。我已经定义了一些像这样的bean:

public class OneBean extends TwoBean {

    private static final long serialVersionUID = 1L;

    public OneBean() {
    }

    private Short idOne;

   public final Short getIdOne() {
        return idOne;
    }

    public final void setIdOne(Short idOne) {
        this.idOne = idOne;
    }
}


public class TwoBean extends ThreeBean{

    private static final long serialVersionUID = 1L;

    public TwoBean() {
    }

    private Short idTwo;

   public final Short getIdTwo() {
        return idTwo;
    }

    public final void setIdTwo(Short idTwo) {
        this.idTwo = idTwo;
    }
}
public class ThreeBean  {

    private static final long serialVersionUID = 1L;

    public ThreeBean() {
    }

    private Short idThree;

    public final Short getIdThree() {
        return idThree;
    }

    public final void setIdThree(Short idThree) {
        this.idThree = idThree;
    }
}

public class OneTypeBean extends TwoTypeBean {

    private static final long serialVersionUID = 1L;


    public OneTypeBean() {
    }

    private Short idOne;

    public final Short getIdOne() {
        return idOne;
    }

    public final void setIdOne(Short idOne) {
        this.idOne = idOne;
    }
}


public class TwoTypeBean {

    private static final long serialVersionUID = 1L;

    public TwoTypeBean() {
    }

    private Short idTwo;
    private Short idThree;

    public final Short getIdTwo() {
        return idTwo;
    }

    public final void setIdTwo(Short idTwo) {
        this.idTwo = idTwo;
    }



    public final Short getIdThree() {
        return idThree;
    }

    public final void setIdThree(Short idThree) {
        this.idThree = idThree;
    }

}

推土机文件是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="
        http://dozer.sourceforge.net 
        http://dozer.sourceforge.net/schema/beanmapping.xsd">

    <mapping>
        <class-a>mypackage.TwoTypeBean</class-a>
        <class-b>mypackage.TwoBean</class-b>
        <field>
            <a>idTwo</a>
            <b>idTwo</b>
        </field>
        <field>
            <a>idThree</a>
            <b>idThree</b>
        </field>
    </mapping>
    <mapping>
        <class-a>mypackage.OneTypeBean</class-a>
        <class-b>mypackage.OneBean</class-b>
        <field>
            <a>idOne</a>
            <b>idOne</b>
        </field>
    </mapping>
</mappings>     

然后,我试图在OneTypeBean对象中转换一个OneBean对象,如下所示:

private OneTypeBean convertBeanToType(TwoBean twoBean) {

    if (twoBean instanceof OneBean) { 
        //OneBean one = (OneBean) twoBean;
        return convert(twoBean, OneTypeBean.class);
    }
}

对我来说一切似乎都很好(可能是层次结构的问题?),但是,我发现了此错误:

    [#|2012-10-23T12:45:45.542+0000|INFO|sun-appserver2.1|javax.enterprise.system.stream.out|_ThreadID=32;_ThreadName=httpSSLWorkerThread-8080-4;|un.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:872)
    at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
    at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
    at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
    at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:264)
    at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
Caused by: org.dozer.MappingException: java.lang.NoSuchMethodException: [B.<init>()
    at org.dozer.util.MappingUtils.throwMappingException(MappingUtils.java:82)
    at org.dozer.factory.ConstructionStrategies$ByConstructor.newInstance(ConstructionStrategies.java:261)
    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.processSuperTypeMapping(MappingProcessor.java:999)
    at org.dozer.MappingProcessor.map(MappingProcessor.java:234)
    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 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 org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
    at org.springframework.web.portlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:362)
    at org.springframework.web.portlet.mvc.annotation.AnnotationMethodHandlerAdapter.doHandle(AnnotationMethodHandlerAdapter.java:349)
    at org.springframework.web.portlet.mvc.annotation.AnnotationMethodHandlerAdapter.handleAction(AnnotationMethodHandlerAdapter.java:283)
    at org.springframework.web.portlet.DispatcherPortlet.doActionService(DispatcherPortlet.java:641)
    at org.springframework.web.portlet.FrameworkPortlet.processRequest(FrameworkPortlet.java:519)
    at org.springframework.web.portlet.FrameworkPortlet.processAction(FrameworkPortlet.java:460)
    at com.sun.portal.portletcontainer.appengine.PortletAppEngineServlet.service(PortletAppEngineServlet.java:264)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
    at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:427)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:333)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at com.sun.portal.portletcontainer.appengine.PortletAppEngineFilter.doFilter(PortletAppEngineFilter.java:105)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:871)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:723)
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:679)
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:594)
    at com.sun.portal.portletcontainer.impl.PortletContainer.invokePAE(PortletContainer.java:819)
    at com.sun.portal.portletcontainer.impl.PortletContainer.invokePAE(PortletContainer.java:694)
    at com.sun.portal.portletcontainer.impl.PortletContainer.executeAction(PortletContainer.java:339)
    at com.liferay.portal.portletcontainer.WindowInvoker.invokeAction(WindowInvoker.java:267)
    at com.liferay.portlet.InvokerPortletImpl.processAction(InvokerPortletImpl.java:357)
    at com.liferay.portal.action.LayoutAction.processPortletRequest(LayoutAction.java:591)
    at com.liferay.portal.action.LayoutAction.processLayout(LayoutAction.java:419)
    ... 96 more
Caused by: java.lang.NoSuchMethodException: [B.<init>()
    at java.lang.Class.getConstructor0(Class.java:2706)
    at java.lang.Class.getDeclaredConstructor(Class.java:1985)
    at org.dozer.factory.ConstructionStrategies$ByConstructor.newInstance(ConstructionStrategies.java:257)
    ... 146 more

|#]

我不知道我还能做什么,我找不到错误。任何帮助..?谢谢!

编辑:

正如我在http://dozer.sourceforge.net/documentation/baseattributes.html中看到的那样,也许我应该将推土机换成这样的东西...

仍无法正常运作,但仍在进行中...

<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="
        http://dozer.sourceforge.net 
        http://dozer.sourceforge.net/schema/beanmapping.xsd">

    <mapping>
        <class-a>mypackage.TwoTypeBean</class-a>
        <class-b>mypackage.ThreeBean</class-b>
        <field>
            <a>idThree</a>
            <b>idThree</b>
        </field>
    </mapping>
    <mapping>
        <class-a>mypackage.OneTypeBean</class-a>
        <class-b>mypackage.OneBean</class-b>
        <field>
            <a>idTwo</a>
            <b>idTwo</b>
        </field>
        <field>
            <a>idOne</a>
            <b>idOne</b>
        </field>
    </mapping>
</mappings> 

参考方案

此处报告了类似的问题,也许可以帮助您:-java.lang.NoSuchMethodException

Java中的<<或>>>是什么意思? - java

This question already has answers here: Closed 7 years ago. Possible Duplicate: What does >> and >>> mean in Java?我在一些Java代码中遇到了一些陌生的符号,尽管代码可以正确编译和运行,但对于括号在此代码中的作用却感…

菱形运算符<>是否等于<?> - java

我在util.TreeSet类中发现,其中一个构造函数正在使用具有空泛型类型的新TreeMap调用另一个构造函数。 public TreeSet(Comparator<? super E> comparator) { this(new TreeMap<>(comparator)); } new TreeMap<>是什么意思…

休眠映射<键,设置<值>> - java

我有以下表格:@Entity @Table(name = "events") Event --id --name @Entity @Table(name = "state") State --id --name @Entity @Table(name = "action") Action --id …

无法从ArrayList <String>转换为List <Comparable> - java

当我写下面的代码时,编译器说 无法从ArrayList<String>转换为List<Comparable>private List<Comparable> get(){ return new ArrayList<String>(); } 但是当我用通配符编写返回类型时,代码会编译。private List&l…

合并List <T>和List <Optional <T >> - java

鉴于: List<Integer> integers = new ArrayList<>(Arrays.asList( 10, 12 )); List<Optional<Integer>> optionalIntegers = Arrays.asList( Optional.of(5), Optional.em…