Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Added

- type handlers for XML (DocTypeHandlerCoreXML and DocTypeHandlerCoreXMLUTF8)
- type handlers for JSON (DocTypeHandlerCoreJSON and DocTypeHandlerCoreJSONUTF8)
- type handlers for JSON (DocTypeHandlerCoreYAML and DocTypeHandlerCoreYAMLUTF8)

### Fixed

- org.fugerit.java.doc.base.config.DocTypeHandlerXML renders the source document in the source format (i.e. JSON or YAML) <https://github.com/fugerit-org/fj-doc/issues/519>

## [8.16.5] - 2025-09-29

### Changed
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,20 @@
import org.fugerit.java.core.xml.dom.DOMIO;
import org.fugerit.java.doc.base.config.DocVersion;
import org.fugerit.java.doc.base.facade.DocFacade;
import org.fugerit.java.doc.base.parser.DocConvert;
import org.fugerit.java.doc.base.parser.DocParserContext;
import org.fugerit.java.xml2json.XmlToJsonHandler;
import org.w3c.dom.Element;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class DocJsonToXml {
public class DocJsonToXml implements DocConvert {

private XmlToJsonHandler handler;
private final XmlToJsonHandler handler;

public DocJsonToXml() {
this( new ObjectMapper() );
this( JsonConstants.getDefaultMapper() );
}

public DocJsonToXml(ObjectMapper mapper) {
Expand Down Expand Up @@ -71,5 +72,10 @@ public Element convert( JsonNode json ) throws ConfigException {
this.setIfNotFound(root, ATT_XSD_LOC, DocParserContext.createXsdVersionXmlns( xsdVersion ));
return root;
}


@Override
public void convert(Reader from, Writer to) throws ConfigException {
this.writerAsXml(from, to);
}

}
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
package org.fugerit.java.doc.json.parse;

import java.io.Reader;
import java.io.Writer;

import org.fugerit.java.core.cfg.ConfigException;
import org.fugerit.java.core.xml.dom.DOMIO;
import org.fugerit.java.doc.base.parser.DocConvert;
import org.fugerit.java.xml2json.XmlToJsonHandler;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class DocXmlToJson {
public class DocXmlToJson implements DocConvert {

private XmlToJsonHandler hanlder;
private final XmlToJsonHandler handler;

public DocXmlToJson() {
this( new ObjectMapper() );
this( JsonConstants.getDefaultMapper() );
}

public DocXmlToJson(ObjectMapper mapper) {
Expand All @@ -25,7 +27,7 @@ public DocXmlToJson(ObjectMapper mapper) {

public DocXmlToJson(XmlToJsonHandler handler) {
super();
this.hanlder = handler;
this.handler = handler;
}

public JsonNode convertToJsonNode( Reader xml ) throws ConfigException {
Expand All @@ -37,7 +39,11 @@ public JsonNode convertToJsonNode( Reader xml ) throws ConfigException {
}

public JsonNode convert( Element root ) throws ConfigException {
return ConfigException.get( () -> this.hanlder.convert( root ) );
return ConfigException.get( () -> this.handler.convert( root ) );
}

@Override
public void convert(Reader from, Writer to) throws ConfigException {
ConfigException.apply( () -> this.handler.getMapper().writerWithDefaultPrettyPrinter().writeValue( to, this.convertToJsonNode( from ) ) );
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.fugerit.java.doc.json.parse;

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonConstants {

private JsonConstants() {}

private static final ObjectMapper DEFAULT_MAPPER = new ObjectMapper();

public static ObjectMapper getDefaultMapper() {
return DEFAULT_MAPPER;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package org.fugerit.java.doc.json.typehandler;

import org.fugerit.java.doc.base.config.*;
import org.fugerit.java.doc.base.facade.DocFacadeSource;

import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

public class DocTypeHandlerCoreJSON extends DocTypeHandlerDefault {

/**
*
*/
private static final long serialVersionUID = -50249858785381015L;

public static final DocTypeHandler HANDLER = new DocTypeHandlerCoreJSON();

public static final DocTypeHandler HANDLER_UTF8 = new DocTypeHandlerCoreJSON( StandardCharsets.UTF_8 );

public static final String TYPE = DocConfig.TYPE_JSON;

public static final String MODULE = "doc-core";

public DocTypeHandlerCoreJSON(Charset charset ) {
super( TYPE, MODULE, null, charset );
}

public DocTypeHandlerCoreJSON() {
super( TYPE, MODULE );
}

@Override
public void handle(DocInput docInput, DocOutput docOutput) throws Exception {
DocFacadeSource.getInstance().convert( docInput.getReader(),
docInput.getSource(), new OutputStreamWriter( docOutput.getOs() ), DocFacadeSource.SOURCE_TYPE_JSON );
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.fugerit.java.doc.json.typehandler;

import org.fugerit.java.doc.base.config.DocTypeHandler;
import org.fugerit.java.doc.base.config.DocTypeHandlerDecorator;

public class DocTypeHandlerCoreJSONUTF8 extends DocTypeHandlerDecorator {

private static final long serialVersionUID = -8512951518109L;

public static final DocTypeHandler HANDLER = new DocTypeHandlerCoreJSONUTF8();

public DocTypeHandlerCoreJSONUTF8() {
super( DocTypeHandlerCoreJSON.HANDLER_UTF8 );
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ void testConvert() {
try ( InputStreamReader reader = new InputStreamReader( ClassHelper.loadFromDefaultClassLoader( "sample/doc_test_01.json" ) );
StringWriter writer = new StringWriter() ) {
DocJsonToXml converter = new DocJsonToXml();
converter.writerAsXml(reader, writer);
converter.convert(reader, writer);
return writer.toString();
}
} ) );
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package test.org.fugerit.java.doc.json.typehandler;

import org.fugerit.java.doc.base.config.DocInput;
import org.fugerit.java.doc.base.config.DocOutput;
import org.fugerit.java.doc.base.config.DocTypeHandler;
import org.fugerit.java.doc.json.typehandler.DocTypeHandlerCoreJSONUTF8;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import java.io.ByteArrayOutputStream;
import java.io.StringReader;

class TestJsonHandlers {

private static final String INPUT_DOC = "<doc/>";

private static final String OUTPUT_DOC = "{\n" +
" \"_t\" : \"doc\"\n" +
"}";

@Test
void testHandler() throws Exception {
DocTypeHandler handler = DocTypeHandlerCoreJSONUTF8.HANDLER;
try (StringReader from = new StringReader(INPUT_DOC);
ByteArrayOutputStream os = new ByteArrayOutputStream();
) {
handler.handle(DocInput.newInput( handler.getType(), from ), DocOutput.newOutput(os));
Assertions.assertEquals( OUTPUT_DOC, os.toString() );
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package org.fugerit.java.doc.yaml.parse;

import org.fugerit.java.doc.json.parse.JsonConstants;

public class DocJsonToYaml extends DocYamlToJson {

public DocJsonToYaml() {
super(JsonConstants.getDefaultMapper(), YamlConstants.getDefaultMapper());
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package org.fugerit.java.doc.yaml.parse;

import org.fugerit.java.doc.json.parse.DocXmlToJson;

public class DocXmlToYaml extends DocXmlToJson {

public DocXmlToYaml() {
super( YamlConstants.getDefaultMapper() );
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,14 @@
import org.fugerit.java.doc.json.parse.DocJsonParser;
import org.fugerit.java.xml2json.XmlToJsonHandler;

import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;

public class DocYamlParser extends DocJsonParser {

public DocYamlParser( XmlToJsonHandler handler ) {
super( DocFacadeSource.SOURCE_TYPE_YAML, handler );
}

public DocYamlParser() {
this( new XmlToJsonHandler( new YAMLMapper() ) );
this( new XmlToJsonHandler( YamlConstants.getDefaultMapper() ) );
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package org.fugerit.java.doc.yaml.parse;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.fugerit.java.core.cfg.ConfigException;
import org.fugerit.java.doc.base.parser.DocConvert;
import org.fugerit.java.doc.json.parse.JsonConstants;

import java.io.Reader;
import java.io.Writer;

public class DocYamlToJson implements DocConvert {

private ObjectMapper mapperFrom;

private ObjectMapper mapperTo;

public DocYamlToJson() {
this( YamlConstants.getDefaultMapper(), JsonConstants.getDefaultMapper() );
}

public DocYamlToJson(ObjectMapper mapperFrom, ObjectMapper mapperTo) {
this.mapperFrom = mapperFrom;
this.mapperTo = mapperTo;
}

@Override
public void convert(Reader from, Writer to) throws ConfigException {
ConfigException.apply( () -> {
JsonNode node = this.mapperFrom.readTree( from );
this.mapperTo.writerWithDefaultPrettyPrinter().writeValue(to, node);
} );
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,11 @@
import org.fugerit.java.doc.json.parse.DocJsonToXml;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;

public class DocYamlToXml extends DocJsonToXml {

public DocYamlToXml() {
super( new ObjectMapper( new YAMLFactory() ) );
super( YamlConstants.getDefaultMapper() );
}

public DocYamlToXml(ObjectMapper mapper) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.fugerit.java.doc.yaml.parse;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;

public class YamlConstants {

private YamlConstants() {}

private static final ObjectMapper DEFAULT_MAPPER = new YAMLMapper();

public static ObjectMapper getDefaultMapper() {
return DEFAULT_MAPPER;
}

}


Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package org.fugerit.java.doc.yaml.typehandler;

import org.fugerit.java.doc.base.config.*;
import org.fugerit.java.doc.base.facade.DocFacadeSource;

import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

public class DocTypeHandlerCoreYAML extends DocTypeHandlerDefault {

/**
*
*/
private static final long serialVersionUID = -50249858785381015L;

public static final DocTypeHandler HANDLER = new DocTypeHandlerCoreYAML();

public static final DocTypeHandler HANDLER_UTF8 = new DocTypeHandlerCoreYAML( StandardCharsets.UTF_8 );

public static final String TYPE = DocConfig.TYPE_YAML;

public static final String MODULE = "doc-core";

public DocTypeHandlerCoreYAML(Charset charset ) {
super( TYPE, MODULE, null, charset );
}

public DocTypeHandlerCoreYAML() {
super( TYPE, MODULE );
}

@Override
public void handle(DocInput docInput, DocOutput docOutput) throws Exception {
DocFacadeSource.getInstance().convert( docInput.getReader(),
docInput.getSource(), new OutputStreamWriter( docOutput.getOs() ), DocFacadeSource.SOURCE_TYPE_YAML );
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.fugerit.java.doc.yaml.typehandler;

import org.fugerit.java.doc.base.config.DocTypeHandler;
import org.fugerit.java.doc.base.config.DocTypeHandlerDecorator;

public class DocTypeHandlerCoreYAMLUTF8 extends DocTypeHandlerDecorator {

private static final long serialVersionUID = -8512962958109L;

public static final DocTypeHandler HANDLER = new DocTypeHandlerCoreYAMLUTF8();

public DocTypeHandlerCoreYAMLUTF8() {
super( DocTypeHandlerCoreYAML.HANDLER_UTF8 );
}

}
Loading