
de.codecentric.mule.assertobjectequals.StreamSaver Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of assert-object-equals-connector Show documentation
Show all versions of assert-object-equals-connector Show documentation
A Mule connector for comparing object structures (Map/List) or XML in MUnit tests.
The newest version!
package de.codecentric.mule.assertobjectequals;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.io.IOUtils;
import org.mule.api.MuleEvent;
import org.mule.api.transformer.DataType;
import org.mule.api.transport.OutputHandler;
/**
* Hold a copy of consumable payload and create a new consumable copy on demand. Caveat: Reads streams into memory,
* which should be ok in test context.
*/
public class StreamSaver {
interface PayloadCreator {
Object createPayload(StreamSaver saver);
}
enum PayloadType implements PayloadCreator {
INPUT_STREAM {
@Override
public Object createPayload(StreamSaver saver) {
return new ByteArrayInputStream(saver.data);
}
},
OUTPUT_HANDLER {
@Override
public Object createPayload(StreamSaver saver) {
return new ByteArrayBasedOutputHandler(saver.data);
}
},
OTHER {
@Override
public Object createPayload(StreamSaver saver) {
return saver.payload;
}
};
}
private PayloadType type;
private DataType> dataType;
private Object payload;
private byte[] data;
public StreamSaver(MuleEvent event, Object payload, DataType> dataType) throws IOException {
this.dataType = dataType;
if (payload instanceof InputStream) {
type = PayloadType.INPUT_STREAM;
InputStream is = (InputStream) payload;
data = IOUtils.toByteArray(is);
is.close();
} else if (payload instanceof OutputHandler) {
type = PayloadType.OUTPUT_HANDLER;
OutputHandler oh = (OutputHandler) payload;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
oh.write(event, bos);
bos.close();
data = bos.toByteArray();
} else {
type = PayloadType.OTHER;
this.payload = payload;
}
}
public Object createPayloadCopy() {
return type.createPayload(this);
}
public DataType> getDataType() {
return dataType;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy