2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
\r
4 * This program and the accompanying materials are made available under the
\r
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
\r
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
\r
8 package org.opendaylight.controller.netconf.util.xml;
\r
10 import io.netty.buffer.ByteBuf;
\r
11 import io.netty.buffer.EmptyByteBuf;
\r
12 import io.netty.buffer.Unpooled;
\r
14 import java.io.ByteArrayInputStream;
\r
15 import java.io.ByteArrayOutputStream;
\r
16 import java.io.IOException;
\r
17 import java.util.List;
\r
19 import javax.xml.parsers.ParserConfigurationException;
\r
21 import org.slf4j.Logger;
\r
22 import org.slf4j.LoggerFactory;
\r
23 import org.w3c.dom.Document;
\r
24 import org.xml.sax.SAXException;
\r
26 import com.siemens.ct.exi.EXIFactory;
\r
27 import com.siemens.ct.exi.api.dom.DOMBuilder;
\r
28 import com.siemens.ct.exi.api.dom.DOMWriter;
\r
29 import com.siemens.ct.exi.exceptions.EXIException;
\r
30 import com.siemens.ct.exi.helpers.DefaultEXIFactory;
\r
32 public class ExiUtil {
\r
34 private final static Logger logger = LoggerFactory.getLogger(ExiUtil.class);
\r
38 public static void encode(final Object msg, final ByteBuf out,
\r
39 ExiParameters parameters)
\r
40 throws EXIException, IOException, SAXException {
\r
41 final byte[] bytes = toExi(msg, parameters);
\r
42 out.writeBytes(bytes);
\r
45 public static void decode(ByteBuf in, List<Object> out,
\r
46 ExiParameters parameters) throws ParserConfigurationException, EXIException, IOException
\r
48 if (in instanceof EmptyByteBuf){
\r
52 EXIFactory exiFactory = DefaultEXIFactory.newInstance();
\r
53 if (parameters.getGrammars() != null) {
\r
54 exiFactory.setGrammars(parameters.getGrammars());
\r
57 if (parameters.getFidelityOptions() != null) {
\r
58 exiFactory.setFidelityOptions(parameters.getFidelityOptions());
\r
61 exiFactory.setCodingMode(parameters.getCodingMode());
\r
62 try (ByteArrayInputStream exiIS = new ByteArrayInputStream(((ByteBuf)in).readBytes(((ByteBuf)in).readableBytes()).array())){
\r
63 DOMBuilder domBuilder = new DOMBuilder(exiFactory);
\r
64 ByteBuf result = Unpooled.copiedBuffer(XmlUtil.toString(domBuilder.parse(exiIS)).getBytes());
\r
70 private static byte[] toExi(Object msg, ExiParameters parameters) throws EXIException, IOException,
\r
73 if (!(msg instanceof ByteBuf)){
\r
74 return Unpooled.EMPTY_BUFFER.array();
\r
77 EXIFactory exiFactory = DefaultEXIFactory.newInstance();
\r
78 if (parameters.getGrammars() != null) {
\r
79 exiFactory.setGrammars(parameters.getGrammars());
\r
82 if (parameters.getFidelityOptions() != null) {
\r
83 exiFactory.setFidelityOptions(parameters.getFidelityOptions());
\r
86 Document doc = XmlUtil.readXmlToDocument(new String( ((ByteBuf)msg).readBytes(((ByteBuf)msg).readableBytes()).array(),"UTF-8"));
\r
87 exiFactory.setCodingMode(parameters.getCodingMode());
\r
89 try (ByteArrayOutputStream exiOS = new ByteArrayOutputStream()){
\r
90 DOMWriter domWriter = new DOMWriter(exiFactory);
\r
91 domWriter.setOutput(exiOS);
\r
92 domWriter.encode(doc) ;
\r
94 return exiOS.toByteArray();
\r