groovy - Nifi:转换 xml:带有 groovy 脚本的错误
问题描述
我需要 Nifi 1.5 中的隐蔽 xml 文件。我尝试在 ExeccuteScript 处理器中执行此脚本:
import groovy.xml.*
import javax.xml.transform.TransformerFactory
import javax.xml.transform.Transformer
import javax.xml.transform.dom.DOMSource
import javax.xml.transform.stream.StreamResult
import org.apache.commons.io.IOUtils
import java.nio.charset.StandardCharsets
import org.apache.nifi.processor.io.StreamCallback
import java.io.StringWriter
flowFile = session.get()
if(!flowFile) return
session.write(flowFile,
{
inputStream, outputStream ->
def xml = IOUtils.toString(inputStream, 'UTF-8')
def reader = new StringReader(xml)
def doc = DOMBuilder.parse(reader)
def records = doc.documentElement
TransformerFactory tFactory = TransformerFactory.newInstance();
StringWriter writer = new StringWriter();
Transformer transformer = tFactory.newTransformer();
DOMSource source = new DOMSource(records);
StreamResult result = new StreamResult(writer);
String strString = writer.toString()
outputStream.write(strString.getBytes(StandardCharsets.UTF_8))
} as StreamCallback
)
session.transfer(flowFile, REL_SUCCESS)
并且输出流文件为空。在本地这部分工作:
def xml = "<xml>...</xml>"
def reader = new StringReader(xml)
def doc = DOMBuilder.parse(reader)
def records = doc.documentElement
TransformerFactory tFactory = TransformerFactory.newInstance();
StringWriter writer = new StringWriter();
Transfor mer transformer = tFactory.newTransformer();
DOMSource source = new DOMSource(records);
StreamResult result = new StreamResult(writer);
String strString = writer.toString()
为什么输出文件是空的?
解决方案
我错过了transformer.transform(source, result)
Nifi 的完整脚本:
import groovy.xml.*
import javax.xml.transform.TransformerFactory
import javax.xml.transform.Transformer
import javax.xml.transform.dom.DOMSource
import javax.xml.transform.stream.StreamResult
import org.apache.commons.io.IOUtils
import java.nio.charset.StandardCharsets
import org.apache.nifi.processor.io.StreamCallback
import java.io.StringWriter
flowFile = session.get()
if(!flowFile) return
session.write(flowFile,
{
inputStream, outputStream ->
def xml = IOUtils.toString(inputStream, 'UTF-8')
def reader = new StringReader(xml)
def doc = DOMBuilder.parse(reader)
def records = doc.documentElement
TransformerFactory tFactory = TransformerFactory.newInstance();
StringWriter writer = new StringWriter();
Transformer transformer = tFactory.newTransformer();
DOMSource source = new DOMSource(records);
StreamResult result = new StreamResult(writer);
transformer.transform(source, result)
String strString = writer.toString()
outputStream.write(strString.getBytes(StandardCharsets.UTF_8))
} as StreamCallback
)
session.transfer(flowFile, REL_SUCCESS)
推荐阅读
- reactjs - CORS 标头“Access-Control-Allow-Origin”缺少 REACT
- python - 透明地通过带有可变参数列表的函数
- linux - 谷歌计算引擎重启到新构建的内核
- mysql - CloudSQL 上的 MySQL8 实例崩溃
- powerbi - Power BI DAX 使用循环测量,包括演示文件
- bootstrap-4 - Bootstrap 4 使用注销将 html 转换为 Bootstrap 4 导航栏
- certificate - 是否可以在云端拥有应用程序 EV 代码签名证书?
- python - 如何使用 seaborn 绘制每个离散变量的计数(这里的计数不仅仅是频率,而是定义的值)
- java - 非常长的 Java JSch 连接超时
- excel - 运行宏excel vba后有没有办法保存为.txt?