DB2: пользовательская функция или процедура не смогли сопоставить с одним методом Java - PullRequest
0 голосов
/ 15 октября 2018

Создается впечатление, что процедура не может найти метод 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

...