Oracle:SQL AES256中Java编译错误成功
我有一个使用AES 256加密JSON数据的Java代码。它完全按照命令提示中的预期工作。但当我将其转换为SQL(Oracle server)时,它会抛出一个错误“编译错误成功”。代码如下:Oracle:SQL AES256中Java编译错误成功,java,oracle,plsql,oracle-sqldeveloper,oracle-apex,Java,Oracle,Plsql,Oracle Sqldeveloper,Oracle Apex,我有一个使用AES 256加密JSON数据的Java代码。它完全按照命令提示中的预期工作。但当我将其转换为SQL(Oracle server)时,它会抛出一个错误“编译错误成功”。代码如下: create or replace JAVA SOURCE NAMED encryptData AS import java.io.*; import java.security.*; import javax.crypto.*; import javax.crypto.spec.*; import ja
create or replace JAVA SOURCE NAMED encryptData AS
import java.io.*;
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import javax.xml.bind.DatatypeConverter;
import java.lang.Exception;
import java.util.Scanner;
import java.io.FileInputStream;
import java.io.BufferedReader;
import java.io.FileReader;
public class encryptData {
public static string encryptJSONCall(String jsonPath, String decSEK) {
String decSEK = decSEK;
File file = new File(jsonPath);
Scanner sc = new Scanner(file);
sc.useDelimiter("\\Z");
String json = removeWhitespaces(sc.next().replace("\n", "").replace("\r", ""));
String encryptedResult = encryptBySymmetricKey(json, decSEK);
System.out.println(encryptedResult);
return encryptedResult;
}
public static String removeWhitespaces(String json) {
boolean quoted = false;
boolean escaped = false;
String out = "";
for(Character c : json.toCharArray()) {
if(escaped) {
out += c;
escaped = false;
continue;
}
if(c == '"') {
quoted = !quoted;
} else if(c == '\\') {
escaped = true;
}
if(c == ' ' &! quoted) {
continue;
}
out += c;
}
return out;
}
public static String encryptBySymmetricKey(String json, String decryptedSek) {
byte[] sekByte = DatatypeConverter.parseBase64Binary(decryptedSek);
Key aesKey = new SecretKeySpec(sekByte, "AES");
try {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, aesKey);
byte[] encryptedjsonbytes = cipher.doFinal(json.getBytes());
String encryptedJson = DatatypeConverter.printBase64Binary(encryptedjsonbytes);
return encryptedJson;
}
catch(Exception e) {
return "Exception "+e;
}
}
}
/
CREATE OR REPLACE FUNCTION encryptData_func(P_json varchar2,p_decSEK VARCHAR2)
RETURN VARCHAR2 AS
LANGUAGE JAVA NAME 'encryptData.encryptJSONCall( java.lang.String,java.lang.String )
return java.lang.String';
问题是我无法找到导致错误的原因,因为系统没有给出其他解释。它只是说“编译错误成功”。哪里出错了?我想
创建或替换函数encryptData\u func…
返回了该错误。如果是这样,请连接到该Oracle用户并运行
select *
from user_errors
where name = 'ENCRYPTDATA_FUNC'; --> note uppercase here!
例如:
SQL> create or replace function f_test
2 return number
3 as
4 begin
5 retval = 1;
6 end;
7 /
Warning: Function created with compilation errors.
SQL> select line, position, text
2 from user_errors
3 where name = 'F_TEST';
LINE POSITION TEXT
---------- ---------- ----------------------------------------------------
5 10 PLS-00103: Encountered the symbol "=" when expecting
one of the following: := . ( @ % ;
The symbol ":= was inserted before "=" to continue.
既然您知道了它的问题所在,您就可以修复它了(希望如此)。这是否回答了您的问题?