0
votes

Mule 4: Dataweave 2.0: Comment faire la différence entre deux instances de temps dans Dataweave 2.0?

Mon exigence est d'obtenir l'âge d'un fichier. Je reçois le temps de création de fichier en utilisant # [attributs.Creationtime] code> Et pour avoir l'âge, je fais une différence avec l'heure actuelle.

org.mule.runtime.core.api.expression.ExpressionRuntimeException: "Cannot coerce Object { encoding: UTF-8, mediaType: application/java; charset=UTF-8, mimeType: application/java, raw: org.mule.weave.v2.module.pojo.reader.JavaBeanObjectValue$JavaBeanObjectSeq@23e1079b, class: java.time.Duration } ({nano: 422741000 as Number {class: "java.lang.Integer"},units: ["SECONDS" as ...) to Number

1| vars.fileAge as Number {unit: "hours"} 
   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Trace:
  at main (line: 1, column: 1)" evaluating expression: "vars.fileAge as Number {unit: "hours"} ".


0 commentaires

3 Réponses :


2
votes

Changez votre variable pour générer JSON comme sortie:

output application/json --- now() - attributes.creationTime


2 commentaires

Bonjour Changer de type MIME à JSON ou DW convertit la sortie à la période. Mais même alors je ne suis pas capable d'extraire les heures de la période résultante. J'ai les mêmes erreurs de coercition de données comme mentionné ci-dessus


Ce que je vous ai fourni ci-dessus fonctionne à ma fin, j'ai réutilisé votre expression d'en haut dans un processeur de messages de transformation, var.fileage comme numéro {unité: "Heures"} . Peut-être avez-vous besoin de partager XML de votre flux.



0
votes

Vous devez effectuer le calcul lorsque vous réglez vars.fileage code>. Les DW suivants produiront simplement la différence entre deux denttimes. Testé sur DW 2.3.0

%dw 2.0
output application/java
var creationTime = "2020-07-17T10:16:53.196Z"
---
(now() - creationTime) as Number {unit: "hours"}


1 commentaires

J'ai essayé de faire ce qui précède et comme mentionné dans la question, je reçois l'erreur que la coercition de type de données n'est pas autorisée: "Impossible de délirant la période de coerce (| PT-4H-33M-34.157073S |) au numéro"



0
votes

Je pense que la question réside dans la version DW ou la version de Mule Studio. J'utilise le studio DW 2.0 et Mule 7.4.2

Quand je fais la différence: maintenant () - attributs.Creationtime Je n'obtiens que quelques secondes et nanos dans la réponse. À partir de là si je récupère des secondes et divisez par 3600, je reçois les heures exactes comme indiqué dans le résultat de la différence. Mais si j'essaie d'utiliser la coercition comme numéro {Unité: "Heures"}} Il échoue.


0 commentaires