/** * $Id: $ * $Date: $ * */ package org.xmlsh.json; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.List; import javax.xml.stream.XMLStreamReader; import javax.xml.stream.XMLStreamWriter; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.xmlsh.core.SafeXMLStreamWriter; import org.xmlsh.core.XValue; import org.xmlsh.sh.shell.SerializeOpts; import org.xmlsh.util.Util; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.TreeNode; import com.fasterxml.jackson.databind.PropertyNamingStrategy; import com.fasterxml.jackson.dataformat.xml.XmlMapper; import com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser; import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator; public class JacksonConverter extends JXConverter { public static Logger mLogger = LogManager.getLogger(); public JacksonConverter( SerializeOpts serializeOpts, List<XValue> mArgs) { super( serializeOpts, mArgs); } protected XmlMapper getXmlMapper() { XmlMapper xmlMapper = JSONUtils.newXmlMapper(); xmlMapper .setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES); return xmlMapper; } class JSONConverter implements IJSONConverter { private JsonGenerator mGenerator; private FromXmlParser mParser; protected JSONConverter(XMLStreamReader reader, OutputStream os) throws ConverterException { super(); try { mParser = getXmlMapper().getFactory().createParser(reader); mGenerator = JSONUtils.createGenerator( os,getSerializeOpts() ); } catch (IOException e) { throw new ConverterException(e); } } @Override public boolean parse() throws ConverterException { try { TreeNode tree = mParser.readValueAsTree(); mGenerator.writeTree(tree); return true; } catch (IOException e) { throw new ConverterException(e); } } @Override public void close() throws ConverterException { JSONUtils.safeClose(mGenerator); JSONUtils.safeClose(mParser); mGenerator = null; mParser = null; } } class XMLConverter implements IXMLConverter { JsonParser mParser; InputStream mInput; XMLStreamWriter mWriter; ToXmlGenerator mGenerator; protected XMLConverter(InputStream is, XMLStreamWriter sw) throws ConverterException { mInput = is; mWriter = new SafeXMLStreamWriter(new XMLRewritingStreamWriter(sw)); try { mParser = JSONUtils.getJsonFactory().createParser(is); XmlMapper xmlMapper = getXmlMapper(); mGenerator = xmlMapper.getFactory().createGenerator(mWriter); } catch (JsonParseException e) { throw new ConverterException(e); } catch (IOException e) { throw new ConverterException(e); } } @Override public boolean parse() throws ConverterException { try { TreeNode tree = mParser.readValueAsTree(); mGenerator.writeTree(tree); /* * mParser.nextToken(); * mGenerator.copyCurrentStructure(mParser); */ return true; } catch (IOException e) { throw new ConverterException(e); } } @Override public void close() throws ConverterException { JSONUtils.safeClose(mGenerator); JSONUtils.safeClose(mParser); Util.safeClose(mWriter); mGenerator = null; mParser = null; mWriter = null; } } @Override IJSONConverter newJConverter(XMLStreamReader reader, OutputStream os) throws ConverterException { return new JSONConverter(reader, os); } @Override IXMLConverter newXMLConverter(InputStream is, XMLStreamWriter sw) throws ConverterException { return new XMLConverter(is, sw); } } /* * Copyright (C) 2008-2012 David A. Lee. * * The contents of this file are subject to the "Simplified BSD License" (the * "License"); you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.opensource.org/licenses/bsd-license.php * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for * the specific language governing rights and limitations under the License. * * The Original Code is: all this file. * * The Initial Developer of the Original Code is David A. Lee * * Portions created by (your name) are Copyright (C) (your legal entity). All * Rights Reserved. * * Contributor(s): David A. Lee */