我有一个加密任务,该任务接收输入文件和输出文件以及用于执行加密的密钥。奇怪的是,当我尝试提取执行行加密并将其作为参数接收的方法时,会收到下一个错误:Could not find method encryptLine() for arguments [PK] on task ':presentation:encryptScenarios' of type EncryptionTask.
。
当我内联此方法时-可以正常工作。
这是内联变体的代码:
@TaskAction
void encryptFile() {
assertThatEncryptionKeyIsPresent()
createNewOutputFileIfNotExists()
final FileOutputStream outputStream = new FileOutputStream(outputFile)
inputFile.eachLine { String line ->
final byte[] inputBytes = line.getBytes()
final byte[] secretBytes = key.getBytes()
final byte[] outputBytes = new byte[inputBytes.length]
int spos = 0
for (int pos = 0; pos < inputBytes.length; ++pos) {
outputBytes[pos] = (byte) (inputBytes[pos] ^ secretBytes[spos])
spos += 1
if (spos >= secretBytes.length) {
spos = 0
}
}
outputStream.write(Base64.encodeBase64String(outputBytes).getBytes())
}
}
这是提取的方法变体的代码:
@TaskAction
void encryptFile() {
assertThatEncryptionKeyIsPresent()
createNewOutputFileIfNotExists()
final FileOutputStream outputStream = new FileOutputStream(outputFile)
inputFile.eachLine { String line ->
byte[] outputBytes = encryptLine(line)
outputStream.write(Base64.encodeBase64String(outputBytes).getBytes())
}
}
private byte[] encryptLine(String line) {
final byte[] inputBytes = line.getBytes()
final byte[] secretBytes = key.getBytes()
final byte[] outputBytes = new byte[inputBytes.length]
int spos = 0
for (int pos = 0; pos < inputBytes.length; ++pos) {
outputBytes[pos] = (byte) (inputBytes[pos] ^ secretBytes[spos])
spos += 1
if (spos >= secretBytes.length) {
spos = 0
}
}
outputBytes
}
如何使用此私有方法对行进行加密来解决此问题?
答案 0 :(得分:1)
此错误似乎与此处引用的Groovy问题有关:https://issues.apache.org/jira/browse/GROOVY-7797
您正试图从同一类的闭包中调用私有方法,但似乎不支持此方法。
请尝试从private
方法定义中删除encryptLine
修饰符,您应该摆脱此错误。