
org.panteleyev.commons.xml.XMLStreamWriterWrapper Maven / Gradle / Ivy
/*
Copyright © 2024 Petr Panteleyev
SPDX-License-Identifier: BSD-2-Clause
*/
package org.panteleyev.commons.xml;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
import java.io.OutputStream;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Map;
import java.util.Set;
import static org.panteleyev.commons.xml.Formatters.DATE_FORMATTER;
import static org.panteleyev.commons.xml.Formatters.DATE_TIME_FORMATTER;
/**
* Implements convenience wrapper for {@link XMLStreamWriter} instances.
* Attribute values are converted to string accoring to the following rules:
*
* Class String Value
* {@link String} as is
* {@link LocalDateTime} ISO date time
* {@link Enum} {@link Enum#name()}
* {@link LocalDate} {@link LocalDate#toEpochDay()} or ISO date depending on {@link Option options}.
* {@link Object} {@link Object#toString()}
*
*/
@SuppressWarnings("UnusedReturnValue")
public class XMLStreamWriterWrapper implements AutoCloseable {
/**
* Serialization options.
*/
public enum Option {
/**
* Exports {@link LocalDate} as {@link LocalDate#toEpochDay() epoch day}, otherwise as ISO_DATE.
*/
LOCAL_DATE_AS_EPOCH_DAY
}
private static final XMLOutputFactory XML_OUTPUT_FACTORY = XMLOutputFactory.newInstance();
private final XMLStreamWriter writer;
private final boolean localDateAsEpochDay;
/**
* Creates an instance of {@link XMLStreamWriterWrapper} with default options.
*
* @param out output stream
* @return instance of {@link XMLStreamWriterWrapper}
*/
public static XMLStreamWriterWrapper newInstance(OutputStream out) {
return newInstance(out, Set.of());
}
/**
* Creates an instance of {@link XMLStreamWriterWrapper} with specified options.
*
* @param out output stream
* @param options set of options
* @return instance of {@link XMLStreamWriterWrapper}
*/
public static XMLStreamWriterWrapper newInstance(OutputStream out, Set
© 2015 - 2025 Weber Informatics LLC | Privacy Policy