Как записать входящую полезную нагрузку JSON в файл PDF с помощью Mule 4

#mule #mule-studio #mulesoft #mule-esb #mule4

#mule #mule-studio #mulesoft #mule-esb #mule4

Вопрос:

Я пытаюсь преобразовать JSON в PDF-файл, но когда я пытаюсь открыть файл, получаю ошибку «Не удалось загрузить PDF-документ» в mule 4 (время выполнения 4.2.1). Как я могу исправить эту проблему?

код:

  <?xml version="1.0" encoding="UTF-8"?>
  <mule xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
xmlns:http="http://www.mulesoft.org/schema/mule/http"
xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core 
  http://www.mulesoft.org/schema/mule/core/current/mule.xsd
 http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
    http://www.mulesoft.org/schema/mule/ee/core 
     http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
   http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd">

  <http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" doc:id="79ef9cde-39c4-449a-8cac-9aeb3be30c27" >
    <http:listener-connection host="0.0.0.0" port="8084" />
</http:listener-config>
<file:config name="File_Config" doc:name="File Config" doc:id="d67cbdb7-3bc8-4f04-8d7f-862c539f5f3f" >
    <file:connection workingDir="D:Devendraworkspace_devmule4pdfsrcmainresourcespdf" />
</file:config>
<flow name="pdfFlow" doc:id="eaef4b93-c6f1-4e01-9df3-93e2ba2dcba4" >
    <http:listener doc:name="Listener" doc:id="1407afe8-dbea-4f67-8514-29b8039c5638" config-ref="HTTP_Listener_config" path="/pdf"/>
    <set-payload value="#[payload]" doc:name="Set Payload" doc:id="a250f9a4-c633-4ce1-a75d-8668d2dede10" mimeType="application/json"/>
    <file:write doc:name="Write" doc:id="ca2c47a2-924d-445a-8ca1-7de6197cd583" path="test.pdf" config-ref="File_Config"/>
    <logger level="INFO" doc:name="Logger" doc:id="0c629051-500e-4bc0-82b4-74b6c79ec567" message="#[payload]"/>
</flow>
  </mule>
  

Комментарии:

1. Эта ошибка не кажется полной, или, может быть, это не ошибка от Mule? Пожалуйста, добавьте полное сообщение об ошибке из журнала в вопрос.

Ответ №1:

Я подозреваю, что проблема заключается в том, что поток записывает файл JSON в файл с именем test.pdf. Если вы попытаетесь открыть с помощью программы чтения PDF, произойдет сбой, поскольку документ JSON не является файлом PDF.

 <set-payload value="#[payload]" doc:name="Set Payload" doc:id="a250f9a4-c633-4ce1-a75d-8668d2dede10" mimeType="application/json"/>
  

В Mule нет функции преобразования в PDF, поэтому вам нужно будет реализовать это преобразование с помощью Java-кода, вызывающего некоторую библиотеку генерации PDF.

Ответ №2:

Это невозможно в dataweave st away, поэтому, пожалуйста, напишите код Java. Ниже приведен код Java, который поможет вам

Поместите этот класс Java внутрь src/main/java/com/pdf/JsonToPDF.java папка

 package com.pdf;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import com.itextpdf.text.Document;

import com.itextpdf.text.DocumentException;

import com.itextpdf.text.Paragraph;

import com.itextpdf.text.pdf.PdfWriter;


public class JsonToPDF {

public static void jsontopdf(String filename,String content) {

Document document = new Document();

try

{

File file = new File(filename);

PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));

document.open();

document.add(new Paragraph(content));

document.close();

writer.close();

} catch (DocumentException e)

{

e.printStackTrace();

} catch (FileNotFoundException e)

{

e.printStackTrace();

}


}


}
  

и вызовите этот статический метод в вашем хранилище данных. Ниже приведен код dataweave

 
%dw 2.0

import java!com::pdf::JsonToPDF

output application/java

---

{

pdf :JsonToPDF::jsontopdf("C:\Users\nanmanikanta\Desktop\Integration\test.pdf","{

'test': 'test'


}")

}

  

Вы можете изменить эту java, чтобы просто написать pdf или создать этот класс для возврата потока файлов pdf и передачи другим процессорам.

Вы можете выполнять несколько действий.

Для справки вот ссылки на примеры кода библиотеки itext :

https://howtodoinjava.com/library/read-generate-pdf-java-itext/