Çok sayıda öğeyi jaxb2marshaller kullanarak CDATA ile XML'e geçirirken büyük sorun yaşıyorum. Ben gibi çözümlerle gitti:org.springframework.oxm jaxb2marshaller kullanarak CDATA'yı ekleyin
JAXB Marshalling Unmarshalling with CDATA
How to generate CDATA block using JAXB?
ve çok daha fazlası, ancak uygun bir çözüm bulamadık. Eski JAXB uygulamasına geçmeyi ya da MOXY'yi kullanmayı söylüyorlar. Ama bu benim şartım değil. OXM kütüphanesini kullanarak aşağıdaki iki sınıfı uygulamaya koydum ve CDATA'nın eklenmesi gereken az sayıda elemanın ihtiyaç duyduğu bir XML oluşturmak istiyorum.
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;
}
}
ve Ana sınıfında
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);
}
}
ve XML üretmek için belirleyiciler ve alıcılar ile basit POJO sınıfı.
XML'yi gerekli CDATA özniteliği ile üretmek için yukarıdaki herhangi bir yerde değişiklik yapabilir miyim?
NOT: Zaten EclipseLink Moxy'yi (@XmlData) denedim ve OXM ile bütünleşmiyor. Kodumda üçüncü taraf bir kavanoz kullanmadan bunu uygulamaya çalışıyorum.