6
6
import java .io .StringWriter ;
7
7
import java .util .HashMap ;
8
8
import java .util .Iterator ;
9
+ import java .util .LinkedHashMap ;
9
10
import java .util .Map ;
10
11
11
12
import org .fugerit .java .core .function .SafeFunction ;
34
35
import jakarta .enterprise .context .ApplicationScoped ;
35
36
import lombok .extern .slf4j .Slf4j ;
36
37
38
+ import javax .script .Bindings ;
39
+ import javax .script .ScriptContext ;
37
40
import javax .script .ScriptEngine ;
38
41
import javax .script .ScriptEngineManager ;
39
42
@@ -104,14 +107,21 @@ private void handleFtlx( DocTypeHandler handler, String type, int sourceType, Re
104
107
} );
105
108
}
106
109
107
- private void handleKts ( DocTypeHandler handler , String type , Reader reader , ByteArrayOutputStream baos ) {
110
+ private void handleKts ( DocTypeHandler handler , String type , Reader reader , ByteArrayOutputStream baos , String ktsJsonData ) {
108
111
SafeFunction .apply ( () -> {
109
112
ScriptEngineManager manager = new ScriptEngineManager ();
110
113
ScriptEngine engine = manager .getEngineByExtension ( "kts" );
111
- Object obj = engine .eval ( StreamIO .readString ( reader ) );
112
- String xml = obj .toString ();
113
- try ( StringReader xmlReader = new StringReader ( xml ) ) {
114
- this .doHandle (handler , type , DocFacadeSource .SOURCE_TYPE_XML , xmlReader , baos );
114
+ Bindings bindings = engine .createBindings ();
115
+ ObjectMapper mapper = new ObjectMapper ();
116
+ try ( StringReader jsonReader = new StringReader (ktsJsonData ) ) {
117
+ LinkedHashMap data = mapper .readValue ( jsonReader , LinkedHashMap .class );
118
+ bindings .put ( "data" , data );
119
+ engine .setBindings ( bindings , ScriptContext .ENGINE_SCOPE );
120
+ Object obj = engine .eval ( StreamIO .readString ( reader ) );
121
+ String xml = obj .toString ();
122
+ try ( StringReader xmlReader = new StringReader ( xml ) ) {
123
+ this .doHandle (handler , type , DocFacadeSource .SOURCE_TYPE_XML , xmlReader , baos );
124
+ }
115
125
}
116
126
} );
117
127
}
@@ -132,7 +142,7 @@ public byte[] generateHelper( GenerateInput input, DocTypeHandler handler) throw
132
142
if ( InputFacade .FORMAT_FTLX .equalsIgnoreCase ( input .getInputFormat () ) ) {
133
143
this .handleFtlx (handler , type , sourceType , reader , baos , input .getFreemarkerJsonData ());
134
144
} else if ( InputFacade .FORMAT_KTS .equalsIgnoreCase ( input .getInputFormat () ) ) {
135
- this .handleKts (handler , type , reader , baos );
145
+ this .handleKts (handler , type , reader , baos , input . getFreemarkerJsonData () );
136
146
} else {
137
147
this .doHandle (handler , type , sourceType , reader , baos );
138
148
}
0 commit comments