package org.jboss.windup.tooling;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Path;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.SchemaOutputResolver;
import javax.xml.transform.Result;
import javax.xml.transform.stream.StreamResult;
import org.jboss.windup.util.exception.WindupException;
/**
* @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a>
*/
public class DefaultToolingXMLService implements ToolingXMLService
{
private static final long serialVersionUID = 1L;
@Override
public void serializeResults(ExecutionResults results, OutputStream outputStream)
{
try
{
JAXBContext jaxbContext = getJAXBContext();
jaxbContext.createMarshaller().marshal(results, outputStream);
}
catch (JAXBException e)
{
throw new WindupException("Error serializing results due to: " + e.getMessage(), e);
}
}
@Override
public void generateSchema(Path outputPath)
{
try
{
JAXBContext jaxbContext = getJAXBContext();
SchemaOutputResolver sor = new SchemaOutputResolver()
{
@Override
public Result createOutput(String namespaceUri, String suggestedFileName) throws IOException
{
StreamResult result = new StreamResult();
result.setSystemId(outputPath.toUri().toString());
return result;
}
};
jaxbContext.generateSchema(sor);
}
catch (JAXBException | IOException e)
{
throw new WindupException("Error generating Windup schema due to: " + e.getMessage(), e);
}
}
private JAXBContext getJAXBContext() throws JAXBException
{
return JAXBContext.newInstance(
org.jboss.windup.tooling.ExecutionResultsImpl.class,
org.jboss.windup.tooling.data.ClassificationImpl.class,
org.jboss.windup.tooling.data.HintImpl.class,
org.jboss.windup.tooling.data.LinkImpl.class,
org.jboss.windup.tooling.data.QuickfixImpl.class,
org.jboss.windup.tooling.data.ReportLinkImpl.class,
org.jboss.windup.tooling.data.IssueCategoryImpl.class);
}
}