You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在XSLT中使用java.util.Base64.Decoder解码Base64遇编译错误

解决XSLT调用Java Base64解码的编译错误

嘿,我来帮你搞定这个问题!你遇到的编译错误是因为调用Java Base64.Decoder的decode方法时,参数类型和调用方式没匹配上,咱们一步步理清楚:

问题出在哪?

你当前的代码里,$base64Value是字符串类型,但Java的Decoder.decode方法并没有直接接收字符串的2参数版本(你传了Decoder实例+字符串,但Decoder的decode是实例方法,而且参数需要是字节数组或者CharSequence,XSLT里直接传字符串可能触发类型不匹配)。另外,调用实例方法的方式在XSLT里也需要注意写法。

两种可行的修正方案

方案1:用更简洁的静态方法调用(推荐)

不用单独创建Decoder变量,直接链式调用Base64.getDecoder().decode(),注意把字符串转成字节数组:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:base64="java:java.util.Base64">

    <xsl:template match="/">
        <xsl:variable name="base64Value" select="'aGVsbG8='"/>
        <!-- 把字符串转成字节数组,匹配decode(byte[])方法签名 -->
        <xsl:value-of select="base64:getDecoder()/decode($base64Value.getBytes())"/>
    </xsl:template>
</xsl:stylesheet>

方案2:正确使用Decoder实例

如果你一定要单独定义Decoder变量,得确保调用实例方法时参数正确:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:base64="java:java.util.Base64"
    xmlns:decoder="java:java.util.Base64.Decoder">

    <xsl:template match="/">
        <xsl:variable name="base64Value" select="'aGVsbG8='"/>
        <xsl:variable name="deco" select="base64:getDecoder()"/>
        <!-- 调用Decoder实例的decode方法,传入字符串的字节数组 -->
        <xsl:value-of select="decoder:decode($deco, $base64Value.getBytes())"/>
    </xsl:template>
</xsl:stylesheet>

核心要点提醒

  • Java的Base64.Decoder有两个常用的decode方法:decode(byte[])和decode(CharSequence),在XSLT里直接传字符串可能会有类型转换问题,所以显式调用.getBytes()转成字节数组更稳妥,能准确匹配方法签名。
  • 在XSLT里调用Java实例方法时,要么用对象/方法()的链式写法,要么用命名空间:方法(对象, 参数)的形式,别搞混了静态方法和实例方法的调用方式。

内容的提问来源于stack exchange,提问作者Juan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:03:56