use of com.mulesoft.tools.migration.step.util.XmlDslUtils.CORE_NAMESPACE in project mule-migration-assistant by mulesoft.
the class HttpTransformers method execute.
@Override
public void execute(Element object, MigrationReport report) throws RuntimeException {
if ("request-wildcard-filter".equals(object.getName())) {
addValidationDependency(getApplicationModel().getPomModel().get());
addValidationNamespace(object.getDocument());
Element wildcardFilterTryScope = new Element("try", CORE_NAMESPACE);
Element matchValidator = new Element("matches-regex", VALIDATION_NAMESPACE);
String regex;
Element parent = object.getParentElement();
if ("not-filter".equals(parent.getName()) && parent.getNamespace().equals(CORE_NAMESPACE)) {
addElementAfter(wildcardFilterTryScope, object.getParentElement());
object.getParentElement().detach();
regex = "^(?!" + object.getAttributeValue("pattern").replaceAll("\\*", ".*") + ").*$";
} else {
regex = "^" + object.getAttributeValue("pattern").replaceAll("\\*", ".*") + "$";
addElementAfter(wildcardFilterTryScope, object);
object.detach();
}
matchValidator.setAttribute("value", "#[message.attributes.requestPath]");
matchValidator.setAttribute("regex", regex);
matchValidator.removeAttribute("pattern");
wildcardFilterTryScope.addContent(matchValidator);
wildcardFilterTryScope.addContent(new Element("error-handler", CORE_NAMESPACE).addContent(new Element("on-error-propagate", CORE_NAMESPACE).addContent(new Element("set-variable", CORE_NAMESPACE).setAttribute("variableName", "statusCode").setAttribute("value", "406")).setAttribute("type", "MULE:VALIDATION")));
} else if ("body-to-parameter-map-transformer".equals(object.getName())) {
Element bodyToParamMap = new Element("set-payload", CORE_NAMESPACE).setAttribute("value", "#[output application/java --- payload]");
if (object.getParentElement() == object.getDocument().getRootElement()) {
getApplicationModel().getNodes("//mule:transformer[@ref='" + object.getAttributeValue("name") + "']").forEach(t -> {
addElementAfter(bodyToParamMap, t);
t.detach();
});
} else {
addElementAfter(bodyToParamMap, object);
}
object.detach();
} else {
if (object.getAttribute("name") != null) {
getApplicationModel().getNodes("//mule:transformer[@ref = '" + object.getAttributeValue("name") + "']").forEach(t -> t.detach());
}
object.detach();
}
}
use of com.mulesoft.tools.migration.step.util.XmlDslUtils.CORE_NAMESPACE in project mule-migration-assistant by mulesoft.
the class JmsInboundEndpoint method execute.
@Override
public void execute(Element object, MigrationReport report) throws RuntimeException {
jmsTransportLib(getApplicationModel());
addMigrationAttributeToElement(object, new Attribute("isMessageSource", "true"));
Element tx = object.getChild("transaction", JMS_NAMESPACE);
while (tx != null) {
String txAction = mapTransactionalAction(tx.getAttributeValue("action"), report, tx, object);
object.setAttribute("transactionalAction", txAction);
object.removeChild("transaction", JMS_NAMESPACE);
tx = object.getChild("transaction", JMS_NAMESPACE);
}
while (object.getChild("xa-transaction", CORE_NAMESPACE) != null) {
Element xaTx = object.getChild("xa-transaction", CORE_NAMESPACE);
String txAction = mapTransactionalAction(xaTx.getAttributeValue("action"), report, xaTx, object);
object.setAttribute("transactionalAction", txAction);
object.setAttribute("transactionType", "XA");
object.removeChild("xa-transaction", CORE_NAMESPACE);
}
while (object.getChild("multi-transaction", CORE_EE_NAMESPACE) != null) {
Element multiTx = object.getChild("multi-transaction", CORE_EE_NAMESPACE);
String txAction = mapTransactionalAction(multiTx.getAttributeValue("action"), report, multiTx, object);
object.setAttribute("transactionalAction", txAction);
object.removeChild("multi-transaction", CORE_EE_NAMESPACE);
}
getApplicationModel().addNameSpace(JMS_NAMESPACE, "http://www.mulesoft.org/schema/mule/jms/current/mule-jms.xsd", object.getDocument());
object.setNamespace(JMS_NAMESPACE);
object.setName("listener");
Optional<Element> connector = resolveJmsConnector(object, getApplicationModel());
String configName = migrateJmsConfig(object, report, connector, getApplicationModel());
connector.ifPresent(m3c -> {
migrateReconnect(m3c, object, report, object);
if (m3c.getAttributeValue("acknowledgementMode") != null) {
switch(m3c.getAttributeValue("acknowledgementMode")) {
case "CLIENT_ACKNOWLEDGE":
object.setAttribute("ackMode", "MANUAL");
break;
case "DUPS_OK_ACKNOWLEDGE":
object.setAttribute("ackMode", "DUPS_OK");
break;
default:
}
}
if (m3c.getAttributeValue("numberOfConsumers") != null) {
object.setAttribute("numberOfConsumers", m3c.getAttributeValue("numberOfConsumers"));
}
handleConnectorChildElements(m3c, getApplicationModel().getNode("*/*[namespace-uri()='" + JMS_NAMESPACE_URI + "' and local-name()='config' and @name='" + configName + "']"), new Element("connection", CORE_NAMESPACE), report);
});
String destination = processAddress(object, report).map(address -> {
String path = address.getPath();
if ("topic".equals(path)) {
configureTopicListener(object, JMS_NAMESPACE, connector);
return address.getPort();
} else {
return path;
}
}).orElseGet(() -> {
if (object.getAttributeValue("queue") != null) {
return object.getAttributeValue("queue");
} else {
configureTopicListener(object, JMS_NAMESPACE, connector);
return object.getAttributeValue("topic");
}
});
if (object.getAttribute("exchange-pattern") == null || object.getAttributeValue("exchange-pattern").equals("request-response")) {
Element outboundBuilder = new Element("response", JMS_NAMESPACE);
outboundBuilder.addContent(compatibilityProperties(getApplicationModel()));
outboundBuilder.setAttribute("correlationId", "#[migration::JmsTransport::jmsCorrelationId(correlationId, vars)]");
report.report("jms.propertiesListener", object, object);
connector.ifPresent(m3c -> {
if (m3c.getAttributeValue("persistentDelivery") != null) {
outboundBuilder.setAttribute("persistentDelivery", m3c.getAttributeValue("persistentDelivery"));
}
});
object.addContent(outboundBuilder);
}
if (object.getChild("selector", JMS_NAMESPACE) != null) {
object.setAttribute("selector", object.getChild("selector", JMS_NAMESPACE).getAttributeValue("expression"));
object.removeChild("selector", JMS_NAMESPACE);
}
object.setAttribute("config-ref", configName);
if (destination != null) {
object.setAttribute("destination", destination);
}
object.removeAttribute("queue");
object.removeAttribute("topic");
object.removeAttribute("name");
object.removeAttribute("responseTimeout");
// TODO
object.removeAttribute("xaPollingTimeout");
if (object.getAttribute("exchange-pattern") == null || object.getAttributeValue("exchange-pattern").equals("request-response")) {
migrateInboundEndpointStructure(getApplicationModel(), object, report, true);
} else {
migrateInboundEndpointStructure(getApplicationModel(), object, report, false);
}
addAttributesToInboundProperties(object, getApplicationModel(), report);
}
use of com.mulesoft.tools.migration.step.util.XmlDslUtils.CORE_NAMESPACE in project mule-migration-assistant by mulesoft.
the class JmsOutboundEndpoint method migrateOutboundJmsEndpoint.
public static void migrateOutboundJmsEndpoint(Element object, MigrationReport report, Optional<Element> connector, String configName, ApplicationModel appModel) {
String destination = processAddress(object, report).map(address -> {
String path = address.getPath();
if ("topic".equals(path)) {
configureTopicPublisher(object);
return address.getPort();
} else {
return path;
}
}).orElseGet(() -> {
if (object.getAttributeValue("queue") != null) {
return object.getAttributeValue("queue");
} else {
configureTopicPublisher(object);
return object.getAttributeValue("topic");
}
});
report.report("jms.propertiesPublish", object, object);
Element outboundBuilder = new Element("message", JMS_NAMESPACE);
Attribute migrationReplyTo = object.getAttribute("reply-to", Namespace.getNamespace("migration", "migration"));
if (migrationReplyTo != null) {
if (migrationReplyTo.getValue().startsWith("TOPIC:")) {
outboundBuilder.addContent(new Element("reply-to", JMS_NAMESPACE).setAttribute("destination", migrationReplyTo.getValue()).setAttribute("destinationType", "TOPIC"));
} else {
outboundBuilder.addContent(new Element("reply-to", JMS_NAMESPACE).setAttribute("destination", migrationReplyTo.getValue()));
}
migrationReplyTo.detach();
} else {
outboundBuilder.addContent(new Element("reply-to", JMS_NAMESPACE).setAttribute("destination", "#[migration::JmsTransport::jmsPublishReplyTo(vars)]"));
}
outboundBuilder.addContent(compatibilityProperties(appModel));
outboundBuilder.setAttribute("correlationId", "#[migration::JmsTransport::jmsCorrelationId(correlationId, vars)]");
object.setAttribute("sendCorrelationId", "#[migration::JmsTransport::jmsSendCorrelationId(vars)]");
object.addContent(outboundBuilder);
connector.ifPresent(m3c -> {
if (m3c.getAttributeValue("persistentDelivery") != null) {
object.setAttribute("persistentDelivery", m3c.getAttributeValue("persistentDelivery"));
}
// This logic comes from JmsMessageDispatcher#dispatchMessage in Mule 3
if ("true".equals(m3c.getAttributeValue("honorQosHeaders"))) {
report.report("jms.inboundProperties", m3c, object);
String defaultDeliveryMode = "true".equals(m3c.getAttributeValue("persistentDelivery")) ? "2" : "1";
object.setAttribute("persistentDelivery", "#[(vars.compatibility_inboundProperties.JMSDeliveryMode default " + defaultDeliveryMode + ") == 2]");
object.setAttribute("priority", "#[vars.compatibility_inboundProperties.JMSPriority default 4]");
}
handleConnectorChildElements(m3c, appModel.getNode("*/*[namespace-uri()='" + JMS_NAMESPACE_URI + "' and local-name()='config' and @name='" + configName + "']"), new Element("connection", CORE_NAMESPACE), report);
});
if (object.getAttribute("responseTimeout") != null) {
object.addContent(new Element("consume-configuration", JMS_NAMESPACE).setAttribute("maximumWait", object.getAttributeValue("responseTimeout")));
}
object.removeAttribute("responseTimeout");
object.setAttribute("config-ref", configName);
if (destination != null) {
object.setAttribute("destination", destination);
}
object.removeAttribute("queue");
object.removeAttribute("topic");
object.removeAttribute("name");
object.removeAttribute("exchange-pattern");
}
use of com.mulesoft.tools.migration.step.util.XmlDslUtils.CORE_NAMESPACE in project mule-migration-assistant by mulesoft.
the class Poll method execute.
@Override
public void execute(Element element, MigrationReport report) throws RuntimeException {
try {
changeNodeName("", POLL_NEW_NAME).apply(element);
addMigrationAttributeToElement(element, new Attribute("isMessageSource", "true"));
List<Element> childElementsToMove = element.getChildren().stream().filter(s -> !StringUtils.equals(s.getName(), FIXED_FREQ_SCHEDULER) && !StringUtils.equals(s.getName(), CRON_FREQ_SCHEDULER) && !StringUtils.equals(s.getName(), WATERMARK)).collect(toList());
movePollChildsToParent(childElementsToMove, element.getParentElement(), element.getParentElement().indexOf(element) + 1);
if (element.getChild(FIXED_FREQ_SCHEDULER, CORE_NAMESPACE) == null && element.getChild(CRON_FREQ_SCHEDULER, SCHEDULERS_NAMESPACE) == null) {
Element schedulingStrategy = new Element("scheduling-strategy", element.getNamespace());
final Element fixedFrequency = new Element("fixed-frequency", element.getNamespace());
schedulingStrategy.addContent(fixedFrequency);
element.addContent(schedulingStrategy);
// support the `frequency` attribute that was deprecated in 3.5.0
final String newFrequency = changeDefault("1000", "60000", element.getAttributeValue("frequency"));
if (newFrequency != null) {
fixedFrequency.setAttribute("frequency", newFrequency);
}
element.removeAttribute("frequency");
} else {
updateCronScheduler(element);
updateFixedFrequencyScheduler(element);
}
if (element.getChild(WATERMARK, CORE_NAMESPACE) != null) {
Element watermark = element.getChild(WATERMARK, CORE_NAMESPACE);
Element osStore = new Element("store", NEW_OS_NAMESPACE);
Element osRetrieve = new Element("retrieve", NEW_OS_NAMESPACE);
addMigrationAttributeToElement(osStore, new Attribute("lastElement", "true"));
osStore.setAttribute("failIfPresent", "false");
osStore.setAttribute("failOnNullValue", "false");
if (watermark.getAttribute("variable") != null) {
osStore.setAttribute("key", watermark.getAttributeValue("variable"));
osRetrieve.setAttribute("key", watermark.getAttributeValue("variable"));
osRetrieve.setAttribute("target", watermark.getAttributeValue("variable"));
}
if (watermark.getAttribute("default-expression") != null) {
String defaultExpression = getExpressionMigrator().migrateExpression(watermark.getAttributeValue("default-expression"), true, element);
setOSValue(osRetrieve, defaultExpression, "default-value");
}
if (watermark.getAttribute("update-expression") != null) {
String updateExpression = getExpressionMigrator().migrateExpression(watermark.getAttributeValue("update-expression"), true, element);
setOSValue(osStore, updateExpression, "value");
} else if (watermark.getAttribute("selector-expression") != null || watermark.getAttribute("selector") != null) {
String selectorExpression = watermark.getAttributeValue("selector-expression");
String selector = watermark.getAttributeValue("selector");
if (selectorExpression == null) {
setOSValue(osStore, getExpressionFromSelector(selector), "value");
} else if (selector == null) {
selectorExpression = getExpressionMigrator().migrateExpression(selectorExpression, true, element);
setOSValue(osStore, selectorExpression, "value");
} else {
selectorExpression = watermarkSelectorMigrator.migrateSelector(selectorExpression, selector.toLowerCase(), element, report, getExpressionMigrator());
setOSValue(osStore, selectorExpression, "value");
}
}
if (watermark.getAttribute("object-store-ref") != null) {
osStore.setAttribute("objectStore", watermark.getAttributeValue("object-store-ref"));
osRetrieve.setAttribute("objectStore", watermark.getAttributeValue("object-store-ref"));
}
addElementAfter(osRetrieve, element);
addElementToBottom(getContainerElement(element), osStore);
watermark.detach();
addOSModule();
}
} catch (Exception ex) {
throw new MigrationStepException("Failed to migrate poll." + ex.getMessage() + ex.getStackTrace());
}
}
use of com.mulesoft.tools.migration.step.util.XmlDslUtils.CORE_NAMESPACE in project mule-migration-assistant by mulesoft.
the class TransportsUtils method migrateSchedulingStrategy.
/**
* The endpoint may already have a {@code scheduling-strategy} because it was migrated from a Quartz transport. If not, the
* default values are set.
*
* @param endpoint the endpoint to migrate the scheduling strategy
*/
public static void migrateSchedulingStrategy(Element endpoint, OptionalInt defaultFreq) {
Element schedulingStr = endpoint.getChild("scheduling-strategy", CORE_NAMESPACE);
if (schedulingStr == null) {
schedulingStr = new Element("scheduling-strategy", CORE_NAMESPACE);
schedulingStr.addContent(new Element("fixed-frequency", CORE_NAMESPACE));
endpoint.addContent(schedulingStr);
}
Element fixedFrequency = schedulingStr.getChild("fixed-frequency", CORE_NAMESPACE);
if (fixedFrequency != null) {
if (endpoint.getAttribute("pollingFrequency") != null) {
fixedFrequency.setAttribute("frequency", endpoint.getAttributeValue("pollingFrequency", "1000"));
} else if (fixedFrequency.getAttribute("frequency") == null) {
defaultFreq.ifPresent(df -> fixedFrequency.setAttribute("frequency", Integer.toString(df)));
}
endpoint.removeAttribute("pollingFrequency");
}
}
Aggregations