Short Description |
Ports |
Metadata |
CustomJavaWriter Attributes |
Details |
Examples |
Best Practices |
Compatibility |
See also |
CustomJavaWriter executes a user-defined Java code.
Component | Same input metadata | Sorted inputs | Inputs | Outputs | Each to all outputs | Java | CTL | Auto-propagated metadata |
---|---|---|---|---|---|---|---|---|
CustomJavaWriter | - | - | 0-n | 0-n | - | ![]() | ![]() | ![]() |
The number of ports depends on the Java code.
CustomJavaWriter does not propagate metadata.
CustomJavaWriter has no metadata templates.
Requirements on metadata depend on a user-defined transformation.
Attribute | Req | Description | Possible values |
---|---|---|---|
Basic | |||
Algorithm | [1] | A runnable transformation in Java defined in the graph. | |
Algorithm URL | [1] | An external file defining the runnable transformation in Java. | |
Algorithm class | [1] | An external runnable transformation class. | |
Algorithm source charset | Encoding of the external file defining the transformation. The default encoding depends on DEFAULT_SOURCE_CODE_CHARSET in defaultProperties. | E.g. UTF-8 | |
[1] One of these must be set. These transformation attributes must be specified. |
CustomJavaWriter executes the Java transformation. CustomJavaWriter is a more specific CustomJavaComponent focused on writing data.
There are other similar Java components: CustomJavaReader, CustomJavaTransformer and CustomJavaComponent. All these components use a transformation defined in Java, they differ in templates being used.
You can use Public CloverDX API in this component. General parts of custom Java components and Public CloverDX API are described in CustomJavaComponent.
A transformation required by the component must extend
the org.jetel.component.AbstractGenericTransform
class.
The component has the same Java interface as CustomJavaComponent, but it provides a different Java template. See Java Interfaces for CustomJavaComponent.
Create a component capable of writing all input metadata fields as strings. Input metadata fields can include maps and lists.
package jk; import java.io.IOException; import java.io.OutputStream; import org.jetel.component.AbstractGenericTransform; import org.jetel.data.DataField; import org.jetel.data.DataRecord; import org.jetel.exception.JetelRuntimeException; /** * This is an example custom writer. It shows how you can write string * representations of fields into file. */ public class CustomJavaWriterExample01 extends AbstractGenericTransform { @Override public void execute() { String fileUrl = getProperties().getStringProperty("FileUrl"); DataRecord record; try (OutputStream os = getOutputStream(fileUrl, false)) { while ((record = readRecordFromPort(0)) != null) { StringBuffer sb = new StringBuffer(); DataField[] dataFields = record.getFields(); int fieldCount = 1; for (DataField df : dataFields) { sb.append(df.getValue() != null ? df.getValue().toString() : ""); if (df.getMetadata().getDelimiter() != null) { sb.append(df.getMetadata().getDelimiter()); } else { if (fieldCount != dataFields.length) { sb.append(record.getMetadata().getFieldDelimiter()); } } ++fieldCount; } sb.append(record.getMetadata().getRecordDelimiter()); os.write(sb.toString().getBytes("UTF-8")); } } catch (IOException e) { throw new JetelRuntimeException(e); } } }
If Algorithm URL is used, we recommend to explicitly specify Charset.
Version | Compatibility Notice |
---|---|
4.1.0-M1 | CustomJavaWriter is available since 4.1.0-M1. |