Создается впечатление, что процедура не может найти метод java внутри файла jar,
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import org.json.JSONObject;
public class SecurityServiceClient {
private static String executePost(String targetURL, String urlParameters) {
HttpURLConnection connection = null;
try {
// create connection
URL url = new URL(targetURL);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Content-Length", Integer.toString(urlParameters.getBytes().length));
connection.setRequestProperty("Content-Language", "en-US");
connection.setUseCaches(false);
connection.setDoOutput(true);
// send request
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(urlParameters);
wr.close();
// check response code
InputStream is = null;
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK)
is = connection.getInputStream();
else
is = connection.getErrorStream();
// get response
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
StringBuilder response = new StringBuilder();
String line;
while ((line = rd.readLine()) != null) {
response.append(line);
response.append(System.lineSeparator());
}
rd.close();
return response.toString();
}
catch (Exception e) {
e.printStackTrace();
return null;
}
finally {
if (connection != null)
connection.disconnect();
}
}
public static String getSecurityServiceAccessToken(String host, String userName, String password, String applicationInfo) {
String targetURL = String.format("https://some/rest/service/call");
String urlParameters = String.format("username=%1$s&password=%2$s&applicationInfo=\"%3$s\"", userName, password, applicationInfo);
JSONObject response = new JSONObject(executePost(targetURL, urlParameters));
return response.getString("accessToken");
}
}
Этот класс имеет 2 метода: -getSecurityServiceAccessToken () - внутренне вызывает метод -executePost ()
Я пытаюсь вызвать указанный выше код из приведенной ниже процедуры:
CREATE OR REPLACE PROCEDURE schema.PROC_TEST2 (IN HOST VARCHAR(255), IN USERNAME VARCHAR(255))
LANGUAGE JAVA
EXTERNAL NAME 'jarID:SecurityServiceClient.getSecurityServiceAccessToken'
PARAMETER STYLE JAVA
Получение следующей ошибки:
Полученный код ошибки:
DB21034E Команда была обработана как оператор SQL, поскольку она не была допустимой командой процессора командной строки.Во время обработки SQL он возвратил: SQL20204N Пользовательская функция или процедура "schema.PROC_TEST2" не смогла сопоставить один метод Java.НОМЕР ЛИНИИ = 2.SQLSTATE = 46008