我正在尝试从Java代码发送字节数组作为xslt的参数。我在XSL中将类型声明为base64Binary,并将字节数组设置为参数。我收到一个错误,提供的值为字节。我究竟做错了什么?

XSL:-

<xsl:param name="attachmentBytes" as="xs:base64Binary" />


Java代码:

byte[] bytes = "SAMPLE".getBytes();
transformer.setParameter("attachmentBytes", bytes);
transformer.transform(new DOMSource(sourceDocument), new StreamResult(targetStream));


错误代码:
XPTY0004:变量值的必需项目类型为xs:base64Binary;提供的值的项目类型为xs:byte

最佳答案

XSLT正在等待base64binary,但您给出的是byte,如果您不介意类型,则只需更改:

<xsl:param name="attachmentBytes" as="xs:base64Binary" />


通过

<xsl:param name="attachmentBytes" as="xs:byte" />


如果要保留base64binary检查this answer,该检查显示了如何从byte[]转换为base64binary,基本上:

StringBuilder sb = new StringBuilder();
sb.append("data:image/png;base64,");
sb.append(StringUtils.newStringUtf8(Base64.encodeBase64(imageByteArray, false)));
contourChart = sb.toString();

09-27 14:08