2017-02-27 9 views
8

का उपयोग कर सीडीएटीए संलग्न करें मुझे जैक्सबी 2मारशैलर का उपयोग करके सीडीएटीए के साथ एक्सएमएल में कुछ तत्वों को मार्शल करते समय बड़ी परेशानी हो रही है। मैं समाधान के माध्यम से की तरह चले गए हैं:org.springframework.oxm jaxb2marshaller

JAXB Marshalling Unmarshalling with CDATA

How to generate CDATA block using JAXB?

और भी बहुत कुछ है, लेकिन एक उचित समाधान नहीं मिल सका। वे या तो पुराने जेएक्सबी कार्यान्वयन या मोक्सी का उपयोग करने के लिए कहते हैं। लेकिन, यह मेरी आवश्यकता नहीं है। मैंने ओएक्सएम लाइब्रेरी का उपयोग करके दो कक्षाओं के नीचे कार्यान्वित किया है और एक एक्सएमएल जेनरेट करना चाहता हूं जहां कुछ तत्वों को सीडीएटीए संलग्न करने की आवश्यकता है।

import java.util.HashMap; 
import java.util.Map; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.oxm.jaxb.Jaxb2Marshaller; 

@Configuration 
public class AppConfig { 
    @Bean 
    public Processor getHandler(){ 
     Processor handler= new Processor(); 
     handler.setMarshaller(getCastorMarshaller()); 
     handler.setUnmarshaller(getCastorMarshaller()); 
     return handler; 
    } 
    @Bean 
    public Jaxb2Marshaller getCastorMarshaller() { 
     Jaxb2Marshaller jaxb2Marshaller = new Jaxb2Marshaller(); 
     jaxb2Marshaller.setPackagesToScan("com.pom.dom.whatever.model"); 
     Map<String,Object> map = new HashMap<String,Object>(); 
     map.put("jaxb.formatted.output", true); 
     jaxb2Marshaller.setMarshallerProperties(map); 
      return jaxb2Marshaller; 
    } 
} 

और

import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 

import javax.xml.transform.stream.StreamResult; 
import javax.xml.transform.stream.StreamSource; 

import org.springframework.oxm.Marshaller; 
import org.springframework.oxm.Unmarshaller; 

public class Processor { 
    private Marshaller marshaller; 
    private Unmarshaller unmarshalling; 

    public void setMarshaller(Marshaller marshaller) { 
     this.marshaller = marshaller; 
    } 

    public void setUnmarshaller(Unmarshaller unmarshalling) { 
     this.unmarshaller = unmarshaller; 
    } 
    //Converts Object to XML file 
    public void objectToXML(String fileName, Object graph) throws IOException { 
     FileOutputStream fos = null; 
     try { 
      fos = new FileOutputStream(fileName); 
      marshaller.marshal(graph, new StreamResult(fos)); 
     } finally { 
      fos.close(); 
     } 
    } 
    //Converts XML to Java Object 
    public Object xmlToObject(String fileName) throws IOException { 
     FileInputStream fis = null; 
     try { 
      fis = new FileInputStream(fileName); 
      return unmarshaller.unmarshal(new StreamSource(fis)); 
     } finally { 
      fis.close(); 
     } 
    } 
} 

मुख्य वर्ग में:

generateXML(){ 
public void generateCheckXML(ReportDTO repDTO, String fileName){ 

     AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); 
     ctx.register(AppConfig.class); 
     ctx.refresh(); 
     Processor processor = ctx.getBean(Processor.class); 
     ObjectFactory objectFactory = new ObjectFactory(); 

     TRIMSInterface trimsInterface = objectFactory.createTRIMSInterface(); 

     // setters 

     processor.objectToXML(fileName,trimsInterface); 

} 
} 

और setters और getters एक्सएमएल का निर्माण करने के साथ एक सरल POJO वर्ग।

क्या मैं आवश्यक सीडीएटीए विशेषता के साथ एक्सएमएल का उत्पादन करने के लिए कहीं भी कुछ बदलाव कर सकता हूं?

नोट: मैंने पहले से ही एक्लिप्ससेंक मोक्सी (@XmlData) की कोशिश की है और यह ओएक्सएम के साथ एकीकृत नहीं है। मैं अपने कोड में किसी तीसरे पक्ष के जार का उपयोग किए बिना इसे कार्यान्वित करना चाहता हूं।

उत्तर

4

मैक्सी एकीकरण के साथ समाधान मिला (आसपास कोई अन्य रास्ता नहीं मिला), यहां पोस्ट करना अगर यह किसी की ज़रूरत में मदद करता है।

आयातित Moxy निर्भरता और एक ही पैकेज जहां सेम निम्न पंक्ति के साथ बनाई गई है में जोड़ा jaxb.properties फ़ाइल:

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory 

और आवश्यक फ़ील्ड पर @XmlCDATA एनोटेशन डाल दिया। इसने सीडीएटीए अनुभागों के साथ एक्सएमएल फाइल जेनरेट की।

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