2010-11-12 15 views
6

मुझे कक्षा ए को डोजर फ्रेमवर्क का उपयोग करके कक्षा सी में मैप करने की आवश्यकता है।डोजर मैपिंग आंतरिक कक्षाएं

public class A { 

private String fielda1; 
private String fielda2; 

public String getFielda1() { 
    return fielda1; 
} 
public void setFielda1(String fielda1) { 
    this.fielda1 = fielda1; 
} 
public String getFielda2() { 
    return fielda2; 
} 
public void setFielda2(String fielda2) { 
    this.fielda2 = fielda2; 
} 
} 


public class B { 
private List<C> cList; 

public List<C> getcList() { 
    return cList; 
} 
public void setcList(List<C> cList) { 
    this.cList = cList; 
} 

public static class C { 
    private String fieldc1; 
    private String fieldc2; 

    public String getFieldc1() { 
     return fieldc1; 
    } 
    public void setFieldc1(String fieldc1) { 
     this.fieldc1 = fieldc1; 
    } 
    public String getFieldc2() { 
     return fieldc2; 
    } 
    public void setFieldc2(String fieldc2) { 
     this.fieldc2 = fieldc2; 
    } 
} 
} 

एक्सएमएल मैपिंग फ़ाइल:

<mapping wildcard="false" map-null="false" map-id="test"> 
    <class-a>test.A</class-a> 
    <class-b>test.B.C</class-b> 
    <field> 
     <a>fielda1</a> 
     <b>fieldc1</b> 
    </field> 
    <field> 
     <a>fielda1</a> 
     <b>fieldc2</b> 
    </field> 
</mapping> 

जब मैं इन कक्षाओं में मैप करने के लिए मैं अपवाद निम्न गया प्रयास करें:

org.dozer.MappingException: java.lang.ClassNotFoundException: test.B.C 
at org.dozer.util.MappingUtils.throwMappingException(MappingUtils.java:88) 
at org.dozer.util.DefaultClassLoader.loadClass(DefaultClassLoader.java:33) 

यह तेजी कि डोजर इस स्थिति का उपयोग करता संभाल करने में सक्षम नहीं है एक पैकेज नाम के रूप में कक्षा बी। कस्टम कन्वर्टर्स का उपयोग करके इस मुद्दे को हल किया जा सकता है। मैं सिर्फ यह जानना चाहता हूं कि क्या कोई चाल है जिसका उपयोग इन वर्गों को केवल एक्सएमएल कॉन्फ़िगरेशन का उपयोग करके परिवर्तित करने के लिए किया जा सकता है?

+0

स्टैक ओवरव्लो में यह उन उत्तरों को ऊपर उठाने के लिए प्रथागत है जो आपको सबसे ज्यादा मदद करते हैं। इसके अतिरिक्त यह उस उत्तर को स्वीकार करने के लिए भी परंपरागत है जो आपकी समस्या को हल करने में अधिक व्यापक रूप से मदद करता है। आप उत्तर के बाईं ओर ऊपरी तीर का उपयोग करके एक उत्तर ऊपर उठाते हैं (वोटों की संख्या 1 से बढ़ेगी)। आप उत्तर के नीचे चेकमार्क पर क्लिक करके एक जवाब स्वीकार करते हैं, इसलिए यह ठोस हरा हो जाता है। –

उत्तर

22

निम्न उदाहरण में test.B$C की तरह उपयोग करके देखें:

<mapping wildcard="false" map-null="false" map-id="test"> 
    <class-a>test.A</class-a> 
    <class-b>test.B$C</class-b> 
    <field> 
     <a>fielda1</a> 
     <b>fieldc1</b> 
    </field> 
    <field> 
     <a>fielda2</a> 
     <b>fieldc2</b> 
    </field> 
</mapping> 

भी ध्यान रखें कि मैं fielda2 को fielda1 से दूसरे क्षेत्र बदल गया है, यह आपके उदाहरण में कोई गलती दिखाई दिया।

नोट: क्योंकि आप map-id="test" सेट आप mapId शामिल करना चाहिए जब आप, नक्शे फोन की तरह में:

B.C destObject = mapper.map(a, B.C.class, "test"); 

मैं परीक्षण किया है और यह सही ढंग से काम कर रहा है:

A.java

package com.test; 

public class A { 

    private String fielda1; 
    private String fielda2; 

    public String getFielda1() { 
     return fielda1; 
    } 

    public void setFielda1(String fielda1) { 
     this.fielda1 = fielda1; 
    } 

    public String getFielda2() { 
     return fielda2; 
    } 

    public void setFielda2(String fielda2) { 
     this.fielda2 = fielda2; 
    } 
} 

B.java

package com.test; 

import java.util.List; 

public class B { 

    private List<C> cList; 

    public List<C> getcList() { 
     return cList; 
    } 

    public void setcList(List<C> cList) { 
     this.cList = cList; 
    } 

    public static class C { 

     private String fieldc1; 
     private String fieldc2; 

     public String getFieldc1() { 
      return fieldc1; 
     } 

     public void setFieldc1(String fieldc1) { 
      this.fieldc1 = fieldc1; 
     } 

     public String getFieldc2() { 
      return fieldc2; 
     } 

     public void setFieldc2(String fieldc2) { 
      this.fieldc2 = fieldc2; 
     } 
    } 
} 

mapping.xml

<?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 wildcard="false" map-null="false" map-id="test"> 
     <class-a>com.test.A</class-a> 
     <class-b>com.test.B$C</class-b> 
     <field> 
      <a>fielda1</a> 
      <b>fieldc1</b> 
     </field> 
     <field> 
      <a>fielda1</a> 
      <b>fieldc2</b> 
     </field> 
    </mapping> 

</mappings> 

Main.java

package com.test; 

import java.util.ArrayList; 
import java.util.List; 

import org.dozer.DozerBeanMapper; 
import org.dozer.Mapper; 

public class Main5 { 

    public static void main(String[] args) throws Exception { 
     List<String> mappingFiles = new ArrayList<String>(1); 
     mappingFiles.add("mapping.xml"); 

     Mapper mapper = new DozerBeanMapper(mappingFiles); 

     A a = new A(); 
     a.setFielda1("fielda1Value"); 
     a.setFielda2("fielda2Value"); 

     B.C destObject = mapper.map(a, B.C.class, "test"); 

     System.out.println(destObject.getFieldc1()); 
     System.out.println(destObject.getFieldc2()); 
    } 

} 

कंसोल में इस आउटपुट:

... 
fielda1Value 
fielda1Value 
+0

यह काम करता है, पूरी तरह से: डी। आपका बहुत बहुत धन्यवाद। –

+0

@ dino.keco मदद करने में खुशी हुई। कृपया StackOverflow सम्मेलनों के अनुसार उत्तर दें और उत्तर स्वीकार करें। उपरोक्त आपके प्रश्न में मेरी टिप्पणी देखें। –

संबंधित मुद्दे