use of org.mule.runtime.api.metadata.DataType in project mule by mulesoft.
the class DataTypeFactoryTestCase method createsDataTypeForNonNullObject.
@Test
public void createsDataTypeForNonNullObject() throws Exception {
DataType dataType = DataType.fromObject("test");
assertThat(dataType, like(String.class, MediaType.ANY, null));
}
use of org.mule.runtime.api.metadata.DataType in project mule by mulesoft.
the class DataTypeMatchingTestCase method ifCharsetItsNotSpecifiedItShouldBeCompatibleWithAny.
@Test
public void ifCharsetItsNotSpecifiedItShouldBeCompatibleWithAny() throws Exception {
DataType jsonWithCharset = builder(JSON_PARENT_DATA_TYPE).charset(UTF_8).build();
assertThat(JSON_PARENT_DATA_TYPE, is(not(assignableTo(jsonWithCharset))));
assertThat(jsonWithCharset, is(assignableTo(JSON_PARENT_DATA_TYPE)));
}
use of org.mule.runtime.api.metadata.DataType in project mule by mulesoft.
the class StreamingUtils method consumeRepeatablePayload.
/**
* If the {@code event} has a repeatable payload (instance of {@link CursorProvider}), then this method returns a new
* event which payload has an equivalent, already consumed structure. This functionality makes sense for cases like
* caching in which the contents of the stream need to survive the completion of the event that generated it.
* <p>
* If the payload is a {@link CursorStreamProvider}, then it will be consumed into a {@link ByteArrayCursorStreamProvider}
* so that the contents are fully in memory while still keeping repeatable byte streaming semantics.
* <p>
* If the payload is a {@link CursorIteratorProvider}, then the contents will be consumed into a {@link List}.
* <p>
* In any other case, the same input event is returned
*
* @param event an event which might have a repeatable payload
* @return a {@link CoreEvent}
* @since 4.1
*/
public static CoreEvent consumeRepeatablePayload(CoreEvent event) {
TypedValue payload = event.getMessage().getPayload();
final Object originalPayload = payload.getValue();
if (originalPayload == null) {
return event;
}
DataType originalDataType = payload.getDataType();
TypedValue replacedPayload = null;
if (originalPayload instanceof CursorStreamProvider) {
Object consumedPayload = asCursorProvider(toByteArray((CursorStreamProvider) originalPayload));
replacedPayload = new TypedValue(consumedPayload, DataType.builder(originalDataType).type(consumedPayload.getClass()).build());
} else if (originalPayload instanceof CursorIteratorProvider) {
List consumed = new LinkedList<>();
((CursorIteratorProvider) originalPayload).openCursor().forEachRemaining(consumed::add);
DataType newDataType;
if (originalDataType instanceof CollectionDataType) {
final CollectionDataType collectionDataType = (CollectionDataType) originalDataType;
newDataType = DataType.builder(originalDataType).collectionType(consumed.getClass()).itemType(collectionDataType.getItemDataType().getType()).itemMediaType(collectionDataType.getItemDataType().getMediaType()).build();
} else {
newDataType = DataType.builder(originalDataType).type(consumed.getClass()).build();
}
replacedPayload = new TypedValue(consumed, newDataType);
}
if (replacedPayload != null) {
event = CoreEvent.builder(event).message(Message.builder(event.getMessage()).payload(replacedPayload).build()).build();
}
return event;
}
use of org.mule.runtime.api.metadata.DataType in project mule by mulesoft.
the class AbstractTransformer method transform.
@Override
public Object transform(Object src, Charset enc) throws TransformerException {
Object payload = src;
DataType sourceType;
if (src instanceof Message) {
Message message = (Message) src;
if ((!isSourceDataTypeSupported(DataType.MULE_MESSAGE, true) && !(this instanceof AbstractMessageTransformer))) {
payload = message.getPayload().getValue();
sourceType = message.getPayload().getDataType();
} else {
sourceType = DataType.fromObject(payload);
}
} else {
sourceType = DataType.fromObject(payload);
}
if (!isSourceDataTypeSupported(sourceType)) {
I18nMessage msg = transformOnObjectUnsupportedTypeOfEndpoint(getName(), payload.getClass());
// / FIXME
throw new TransformerException(msg, this);
}
if (logger.isDebugEnabled()) {
logger.debug(format("Applying transformer %s (%s)", getName(), getClass().getName()));
logger.debug(format("Object before transform: %s", StringMessageUtils.toString(payload)));
}
Object result = doTransform(payload, enc);
if (logger.isDebugEnabled()) {
logger.debug(format("Object after transform: %s", StringMessageUtils.toString(result)));
}
checkTransformerReturnClass(this, result);
return result;
}
use of org.mule.runtime.api.metadata.DataType in project mule by mulesoft.
the class ExtendedTransformationService method mergeMediaType.
private MediaType mergeMediaType(Message message, DataType transformed) {
DataType original = message.getPayload().getDataType();
MediaType mimeType = ANY.matches(transformed.getMediaType()) ? original.getMediaType() : transformed.getMediaType();
Charset encoding = transformed.getMediaType().getCharset().orElse(message.getPayload().getDataType().getMediaType().getCharset().orElse(getDefaultEncoding(muleContext)));
return DataType.builder().mediaType(mimeType).charset(encoding).build().getMediaType();
}
Aggregations