1 package org.opendaylight.controller.netconf.util.xml;
\r
3 import io.netty.buffer.ByteBuf;
\r
4 import io.netty.buffer.EmptyByteBuf;
\r
5 import io.netty.buffer.Unpooled;
\r
7 import java.io.ByteArrayInputStream;
\r
8 import java.io.ByteArrayOutputStream;
\r
9 import java.io.IOException;
\r
10 import java.util.List;
\r
12 import javax.xml.parsers.ParserConfigurationException;
\r
14 import org.slf4j.Logger;
\r
15 import org.slf4j.LoggerFactory;
\r
16 import org.w3c.dom.Document;
\r
17 import org.xml.sax.SAXException;
\r
19 import com.siemens.ct.exi.EXIFactory;
\r
20 import com.siemens.ct.exi.api.dom.DOMBuilder;
\r
21 import com.siemens.ct.exi.api.dom.DOMWriter;
\r
22 import com.siemens.ct.exi.exceptions.EXIException;
\r
23 import com.siemens.ct.exi.helpers.DefaultEXIFactory;
\r
25 public class ExiUtil {
\r
27 private final static Logger logger = LoggerFactory.getLogger(ExiUtil.class);
\r
31 public static void encode(final Object msg, final ByteBuf out,
\r
32 ExiParameters parameters)
\r
33 throws EXIException, IOException, SAXException {
\r
34 final byte[] bytes = toExi(msg, parameters);
\r
35 out.writeBytes(bytes);
\r
38 public static void decode(ByteBuf in, List<Object> out,
\r
39 ExiParameters parameters) throws ParserConfigurationException, EXIException, IOException
\r
41 if (in instanceof EmptyByteBuf){
\r
45 EXIFactory exiFactory = DefaultEXIFactory.newInstance();
\r
46 if (parameters.getGrammars() != null) {
\r
47 exiFactory.setGrammars(parameters.getGrammars());
\r
50 if (parameters.getFidelityOptions() != null) {
\r
51 exiFactory.setFidelityOptions(parameters.getFidelityOptions());
\r
54 exiFactory.setCodingMode(parameters.getCodingMode());
\r
55 try (ByteArrayInputStream exiIS = new ByteArrayInputStream(((ByteBuf)in).readBytes(((ByteBuf)in).readableBytes()).array())){
\r
56 DOMBuilder domBuilder = new DOMBuilder(exiFactory);
\r
57 ByteBuf result = Unpooled.copiedBuffer(XmlUtil.toString(domBuilder.parse(exiIS)).getBytes());
\r
63 private static byte[] toExi(Object msg, ExiParameters parameters) throws EXIException, IOException,
\r
66 if (!(msg instanceof ByteBuf)){
\r
67 return Unpooled.EMPTY_BUFFER.array();
\r
70 EXIFactory exiFactory = DefaultEXIFactory.newInstance();
\r
71 if (parameters.getGrammars() != null) {
\r
72 exiFactory.setGrammars(parameters.getGrammars());
\r
75 if (parameters.getFidelityOptions() != null) {
\r
76 exiFactory.setFidelityOptions(parameters.getFidelityOptions());
\r
79 Document doc = XmlUtil.readXmlToDocument(new String( ((ByteBuf)msg).readBytes(((ByteBuf)msg).readableBytes()).array(),"UTF-8"));
\r
80 exiFactory.setCodingMode(parameters.getCodingMode());
\r
82 try (ByteArrayOutputStream exiOS = new ByteArrayOutputStream()){
\r
83 DOMWriter domWriter = new DOMWriter(exiFactory);
\r
84 domWriter.setOutput(exiOS);
\r
85 domWriter.encode(doc) ;
\r
87 return exiOS.toByteArray();
\r