如何使用Java EE从xsl输出中读取media-type属性?

时间:2019-06-22 01:31:26

标签: xslt jaxb xslt-2.0 mime-types

我使用XSLT将XML转换为其他内容,在本例中为JSON。我使用<xsl:output method="text" media-type="application/json" encoding="UTF-8"/>标签设置了MIME。

我使用saxon9将XML转换为JSON。

Transformer transformer = tFactory.newTransformer(new StreamSource(xslUrl));
ByteArrayInputStream xmlStream = new ByteArrayInputStream(xml.getBytes());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dataOut = new DataOutputStream(baos);
transformer.transform(new StreamSource(xmlStream), new StreamResult(new OutputStreamWriter(dataOut)));
String output = baos.toString();

如何也将MIME读取为“ application / json”?

2 个答案:

答案 0 :(得分:1)

不一定。例如,如果将输出写入文件存储中的文件,则大多数操作系统不允许在文件元数据中捕获媒体类型,因此它将丢失。

唯一的例外是将输出写入确实捕获了媒体类型的目标(例如HTTP响应)时。在这种情况下,很幸运,可以在HTTP标头中找到媒体类型。

肯定是ByteArrayOutputStream不能捕获有关媒体类型的任何信息。

答案 1 :(得分:1)

这是调用从xsl:output media_type获取MIME的方法。

String mime = transformer.getOutputProperty(OutputKeys.MEDIA_TYPE);

然后您可以采取相应的措施,在我的情况下,就是为HttpServletResponse设置setContentType。