Inspired by the proposed solution in Smooks EDI writer, I have the following Java code:
// Creates minimal EDI message with one field populated
EdifactV3D98AMEDPID edi = new EdifactV3D98AMEDPID();
UNBInterchangeHeader header = new UNBInterchangeHeader();
UNBInterchangeHeader.S002SenderIdentification s002SenderIdentification = new UNBInterchangeHeader.S002SenderIdentification();
s002SenderIdentification.setE0004SenderIdentification("TEST");
header.setS002SenderIdentification(s002SenderIdentification);
edi.setUNBInterchangeHeader(header);
Smooks smooks = new Smooks("edi-output-smooks-config.xml");
// Sets up access to exports specified in Smooks config
ExecutionContext executionContext = smooks.createExecutionContext();
Exports exports = Exports.getExports(smooks.getApplicationContext());
Result[] results = exports.createResults();
smooks.filterSource(executionContext, new JavaSource(edi), results);
List<Object> objects = Exports.extractResults(results, exports);
JavaResult.ResultMap map = (JavaResult.ResultMap) objects.get(0);
D98AInterchangeFactory factory = D98AInterchangeFactory.getInstance();
UNEdifactInterchange41 unEdifactInterchange = (UNEdifactInterchange41) map.get("unEdifactInterchange");
// Should output EDI message as String, but StringWriter is empty
StringWriter ediOutStream = new StringWriter();
factory.toUNEdifact(unEdifactInterchange, ediOutStream);
... with the following Smooks config:
<?xml version="1.0" encoding="UTF-8"?>
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd"
xmlns:core="http://www.milyn.org/xsd/smooks/smooks-core-1.4.xsd">
<!-- Imports D98A Edifact binding found in Maven dependency -->
<import file="/org/milyn/edi/unedifact/d98a/message-bindingconfig.xml" />
<import file="/org/milyn/smooks/edi/unedifact/model/r41/bindings/unedifact-interchange.xml" />
<!-- Configures Result object for accessing EDI output -->
<core:exports>
<core:result type="org.milyn.payload.JavaResult"/>
</core:exports>
</smooks-resource-list>
The StringWriter returns an empty String, whereas I had hoped/expected the Java object as an EDI String.
Any suggestions or pointers?
I don't find the classes EdifactV3D98AMEDPID, UNBInterchangeHeade. But i made a similar test:
I had the same result, an empty string in the end.
But i think the problem is your use of smooks. I only used smooks with Apache Camel, so i don't know if that is the correct way to make a transformation in smooks, but i think that in this case you dont have to call smook, your input is an object EDI and you want to print you object in EDI Format.
The only thing you have to do is:
I already tested, and you get this:
I hope that this could help you