package org.dddlib.codegen.parser; import com.fasterxml.jackson.dataformat.xml.JacksonXmlModule; import com.fasterxml.jackson.dataformat.xml.XmlFactory; import com.fasterxml.jackson.dataformat.xml.XmlMapper; import org.dddlib.codegen.classdef.ClassDefinition; import org.dddlib.codegen.api.ParsingException; import org.dddlib.codegen.classdef.PackageDefinition; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import java.io.File; import java.io.IOException; import java.io.Reader; import java.util.Set; /** * Created by yyang on 2016/12/21. */ public class XmlParser extends AbstractDefinitionParser { private XmlFactory xmlFactory; private XmlMapper xmlMapper; public XmlParser() { xmlFactory = new XmlFactory(); xmlMapper = new XmlMapper(xmlFactory, new JacksonXmlModule()); } @Override public Set<ClassDefinition> parseReader(Reader in) { try { XMLStreamReader reader = XMLInputFactory.newFactory().createXMLStreamReader(in); PackageDefinition packageDefinition = xmlMapper.readValue(reader, PackageDefinition.class); return toClassDefinitions(packageDefinition); } catch (XMLStreamException e) { throw new ParsingException("Cannot parse reader!"); } catch (IOException e) { throw new ParsingException("Cannot parse reader!"); } } @Override public Set<ClassDefinition> parseClasspath(String file) { return null; } @Override public Set<ClassDefinition> parseFile(String file) { return null; } @Override public Set<ClassDefinition> parseFile(File file) { return null; } @Override public boolean accept(String ext) { return "xml".equals(ext); } }