2013-04-08 12 views
14

मुझे पूरा यकीन है, यह जावा ऑब्जेक्ट रूपांतरणों के लिए एक्सएमएल के आसपास कई डुप्लिकेट प्रश्नों में से एक है। लेकिन मैंने यह धागा शुरू किया क्योंकि मुझे सरल नहीं मिला या सरल समाधान की तलाश नहीं हुई।जावा ऑब्जेक्ट्स को XML ऑब्जेक्ट्स मैपिंग

मेरे पास एक xsd है [वास्तव में मैं इसे डिजाइन कर रहा हूं] और xml। मैं प्रति मानचित्रण

<tns:SummaryCart xmlns:tns="SummaryCart" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="SummaryCart.xsd"> 
    <SummaryElement type="test"> 
     <order>1</order> 
     <id>A</id> 
     <displayName>A</displayName> 
     <subElements> 
      <order>1</order> 
      <id>Preactivation</id> 
      <displayName>Preactivation</displayName> 
     </subElements> 
     <maxlines>1</maxlines> 
    </SummaryElement> 
</tns:SummaryCart> 

अब के रूप में जावा सेम के लिए एक्सएमएल डेटा ऑटो मैप करने के लिए चाहते मेरी जावा वर्गों

public class SummaryCart{ 
    private List<SummaryElement> summaryElementList; 
} 
public class SummaryElement { 
    private int order; 
    private String id; 
    private String displayName; 
    private String property; 
    private List<SummaryElement> subElements; 
    private int maxlines; 
    private String type; 
} 

हो जाएगा होगा वहाँ किसी भी साधारण उपकरण/ढांचे ऑटो मैप कर सकते हैं है एक्सएमएल से जावा बीन्स के डेटा [समर्थन गुण/तत्व मैपिंग का समर्थन करना चाहिए]। ट्यूटोरियल अच्छा होगा।

बीटीडब्ल्यू, मैं वसंत ढांचे का उपयोग कर रहा हूं, अगर वसंत-ऑक्स लाभ लिया जाता है, तो इसका स्वागत है।

+5

उपयोग JAXB। [यहां] (http://jaxb.java.net/tutorial/) एक ट्यूटोरियल है। –

उत्तर

28

नीचे यह है कि आप JAXB (JSR-222) का उपयोग कर XML पर अपनी ऑब्जेक्ट को कैसे मैप कर सकते हैं। एक कार्यान्वयन JDK/JRE में शामिल है जावा SE 6. JAXB के साथ शुरू स्प्रिंग द्वारा समर्थित है (खंड 8.5 देखें: http://static.springsource.org/spring-ws/site/reference/html/oxm.html)

SummaryCart

import java.util.List; 
import javax.xml.bind.annotation.*; 

@XmlRootElement(name="SummaryCart", namespace="SummaryCart") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class SummaryCart{ 

    @XmlElement(name="SummaryElement") 
    private List<SummaryElement> summaryElementList; 

} 

SummaryElement

import java.util.List; 
import javax.xml.bind.annotation.*; 

@XmlAccessorType(XmlAccessType.FIELD) 
public class SummaryElement { 

    private int order; 
    private String id; 
    private String displayName; 
    private String property; 
    private List<SummaryElement> subElements; 
    private int maxlines; 

    @XmlAttribute 
    private String type; 

} 

डेमो

import java.io.File; 
import javax.xml.bind.*; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     JAXBContext jc = JAXBContext.newInstance(SummaryCart.class); 

     Unmarshaller unmarshaller = jc.createUnmarshaller(); 
     File xml = new File("src/forum15881876/input.xml"); 
     SummaryCart sc = (SummaryCart) unmarshaller.unmarshal(xml); 

     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "SummaryCart.xsd"); 
     marshaller.marshal(sc, System.out); 
    } 

} 

input.xml/आउटपुट एनोटेशन के साथ

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<ns2:SummaryCart xmlns:ns2="SummaryCart" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="SummaryCart.xsd"> 
    <SummaryElement type="test"> 
     <order>1</order> 
     <id>A</id> 
     <displayName>A</displayName> 
     <subElements> 
      <order>1</order> 
      <id>Preactivation</id> 
      <displayName>Preactivation</displayName> 
      <maxlines>0</maxlines> 
     </subElements> 
     <maxlines>1</maxlines> 
    </SummaryElement> 
</ns2:SummaryCart> 
+0

नहीं कहना है, हम जेडीके 5 का उपयोग कर रहे हैं। हाँ, विरासत आवेदन। क्या मैं इसे मैवेन का उपयोग कर किसी भी विशिष्ट पुस्तकालयों सहित जावा 5 के साथ कर सकता हूं। – Reddy

+0

यहां एक pom.xml फ़ाइल है जो EclipseLink MOXy को JAXB impl के रूप में खींचती है (मैं MOXy लीड हूं): https://github.com/bdoughan/blog20110819/blob/master/pom.xml –

1

असल में आप unmarshal अपने एक्सएमएल चाहते हैं। यहां एक विस्तृत ट्यूटोरियल है जो वर्णन करता है कि JAXB xjc कमांड को generate a Java class from XML Schema पर कैसे उपयोग करें। आपकी सुविधा के लिए एक मेवेन xjc plugin भी उपलब्ध है।

+1

जावा कक्षाओं से शुरू करते समय आप एक JAXB कार्यान्वयन का भी उपयोग कर सकते हैं: http://stackoverflow.com/a/15884122/383861 –

+1

नोटेड ब्लेज़। ओपी के सवाल पर मेरी शुरुआती समझ थी कि वह जावा फाइलों को कुछ भी नहीं निकालना चाहता था, केवल एक्सएसडी का उपयोग अपने शुरुआती बिंदु के रूप में कर रहा था। इसे फिर से पढ़ना, आप सही कह रहे हैं कि उन्हें स्वचालित रूप से उन्हें मानचित्र बनाने के लिए एक तरीका चाहिए। डाउन-वोटिंग के लिए धन्यवाद। :) – Jops

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