powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не вызывается java-класс
9 сообщений из 9, страница 1 из 1
Не вызывается java-класс
    #39280582
chyngyz_zh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем здрасти!

Создал java-класс в Oracle. При компиляции ошибок нет. Этот же код в NetBeans работает без проблем.
Результатом этого метода является отправка СМС-сообщения на указанный номер, и возврат статуса сообщения (удачный, не удачный).
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "Sms3" AS

import java.io.IOException;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;


public class Sms3 {
	
	public static void main(String[] args) throws Exception {
            new Sms3().sendSms();
        }
        
        public static String sendSms() throws Exception {
                String V_RESULT = "";

		DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Calendar cal = Calendar.getInstance();
		    
		String pubKey = "публичный ключ"; //Public Key
		String prtKey = "приват ключ"; //Private Key
		String sender = "наименование"; //Sender Name
		String datetime = dateFormat.format(cal.getTime()); //DateTime
		String phone = "номер телефона"; //Phone number
		String message2 = "текст смс"; //message text
		try{
			
			String hash = getHash(pubKey+phone+sender+message2+datetime+prtKey, "MD5"); // get to hash
		
			URL url = new URL("URL-адрес");
			HttpURLConnection conn =(HttpURLConnection) url.openConnection();
			
			String urlParameters = "hash="+hash+"'&'sender="+sender+"'&'message="+message2+"'&'datetime="+datetime+"'&'publicKey="+pubKey+"'&'phone="+phone+"";
			byte[] postData = urlParameters.getBytes( StandardCharsets.UTF_8 );
			int postDataLength = postData.length;
			
			conn.setDoOutput(true);
			conn.setInstanceFollowRedirects( false );
			conn.setRequestMethod("POST");
			conn.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded");
			conn.setRequestProperty( "charset", "utf-8");
			conn.setRequestProperty( "Content-Length", Integer.toString( postDataLength ));
			conn.setUseCaches( false );
			
                        DataOutputStream wr = new DataOutputStream( conn.getOutputStream());
                        wr.write( postData );
                        wr.flush();
			
			if(conn.getResponseCode() != 200){
				throw new RuntimeException("Failed : HTTP error code : "+conn.getResponseCode());
			}
			BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
			String output;
			
			//System.out.println("Output from Server... \n");
			while ((output = br.readLine()) != null) {
				//System.out.println(output);
                                V_RESULT = V_RESULT + output;
			}
			
			conn.disconnect();
		}catch(MalformedURLException e){
			e.printStackTrace();
		}catch (IOException e) {
			e.printStackTrace();

		  }
            //System.out.println(V_RESULT);
            return V_RESULT;
	}
        
        private static String getHash(String txt, String hashType) {
        try {
                    java.security.MessageDigest md = java.security.MessageDigest.getInstance(hashType);
                    byte[] array = md.digest(txt.getBytes());
                    StringBuffer sb = new StringBuffer();
                    for (int i = 0; i < array.length; ++i) {
                        sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1,3));
                 }
                    return sb.toString();
            } catch (java.security.NoSuchAlgorithmException e) {
                //error action
            }
            return null;
        }

        private static String md5(String txt) {
            return getHash(txt, "MD5");
        }

        private static String sha1(String txt) {
            return getHash(txt, "SHA1");
        }
	
}



Далее пишу функцию для вызова. Тоже компилируется без проблем.
Код: plsql
1.
2.
3.
4.
CREATE OR REPLACE FUNCTION smsSendFunc3
RETURN VARCHAR2
AS
  LANGUAGE JAVA NAME 'Sms3.sendSms() return java.lang.String';



Теперь при попытке запустить:
Код: plsql
1.
select smsSendFunc3 from dual;



выдает ошибку:
Код: plsql
1.
ORA-29541: class FORS.Sms3 could not be resolved



С правами все в порядке, работаю на тестовой базе с полными правами.

Перепробовал все что знал и то что поиском пользовался, не помогло.

В чем может быть ошибка? И как выяснить действительную ошибку java-класса?
...
Рейтинг: 0 / 0
Не вызывается java-класс
    #39280585
chyngyz_zh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытался выяснить пользовательскую ошибку в java-классе следующий кодом:

Код: plsql
1.
2.
3.
4.
5.
6.
SQL> SET SERVEROUTPUT ON SIZE 1000000;
SQL> CALL DBMS_JAVA.SET_OUTPUT (1000000);

Method called

SQL> exec dbms_output.put_line(smsSendFunc3());



Выходит та же ошибка.

Или я неправильно делаю?
...
Рейтинг: 0 / 0
Не вызывается java-класс
    #39280604
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chyngyz_zhПытался выяснить пользовательскую ошибку в java-классе следующий кодом:

Код: plsql
1.
2.
3.
4.
5.
6.
SQL> SET SERVEROUTPUT ON SIZE 1000000;
SQL> CALL DBMS_JAVA.SET_OUTPUT (1000000);

Method called

SQL> exec dbms_output.put_line(smsSendFunc3());



Выходит та же ошибка.

Или я неправильно делаю?

CREATE OR REPLACE AND RESOLVE ?
...
Рейтинг: 0 / 0
Не вызывается java-класс
    #39280773
dba123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chyngyz_zh,

Код: plsql
1.
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "Sms3" 

может быть двойные кавычки?
...
Рейтинг: 0 / 0
Не вызывается java-класс
    #39280776
chyngyz_zh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ora601,

авторCREATE OR REPLACE AND RESOLVE ?
На строчках
Код: plsql
1.
2.
3.
4.
}
        
        public static String sendSms() throws Exception {
                String V_RESULT = "";


и
Код: plsql
1.
String urlParameters = "hash="+hash+"'&'sender="+sender+"'&'message="+message2+"'&'datetime="+datetime+"'&'publicKey="+pubKey+"'&'phone="+phone+"";


выводит сообщение
Код: plsql
1.
ORA-01741: illegal zero-length identifier


во всех остальных строчках
Код: plsql
1.
ORA-00900: invalid SQL statement
...
Рейтинг: 0 / 0
Не вызывается java-класс
    #39280781
chyngyz_zh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
SELECT * FROM user_objects t
where t.object_name='Sms3'


показывает статус INVALID и в JAVA CLASS, и в JAVA SOURCE
...
Рейтинг: 0 / 0
Не вызывается java-класс
    #39280870
chyngyz_zh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
select * from user_errors where name = 'Sms3';


показывает
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
NAME	TYPE	SEQUENCE	TEXT
Sms3	JAVA CLASS	1	ORA-29535: source requires recompilation
Sms3	JAVA SOURCE	1	Sms3:8: cannot resolve symbol
Sms3	JAVA SOURCE	2	symbol  : class StandardCharsets 
Sms3	JAVA SOURCE	3	location: package charset
Sms3	JAVA SOURCE	4	import java.nio.charset.StandardCharsets;
Sms3	JAVA SOURCE	5	                        ^
Sms3	JAVA SOURCE	6	Sms3:40: cannot resolve symbol
Sms3	JAVA SOURCE	7	symbol  : variable StandardCharsets 
Sms3	JAVA SOURCE	8	location: class Sms3
Sms3	JAVA SOURCE	9	"			byte[] postData = urlParameters.getBytes( StandardCharsets.UTF_8 );"
Sms3	JAVA SOURCE	10	                                                                  ^
Sms3	JAVA SOURCE	11	2 errors


Что-то не пойму, на "StandardCharsets" ругается или...?
...
Рейтинг: 0 / 0
Не вызывается java-класс
    #39280954
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рекомендую:

- отлаживать java-код вне оракла, в каком-то нормальном IDE типа Eclipse;
- использовать ту же версию JVM, что в вашем оракле;
- если используются нестандартные библиотеки, не забывать подключать их в проект;
- отлаженный .jar, либо .class, либо .java загружать в Oracle.
...
Рейтинг: 0 / 0
Не вызывается java-класс
    #39280989
chyngyz_zh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmdmdm,

Как уже писал выше, код отлажен и работает в NetBeans.

Соглашусь с вами, проблема скорей всего в версии JVM, при импорте класса "import java.nio.charset.StandardCharsets;".
На сайте https://docs.oracle.com/javase/7/docs/api/java/nio/charset/StandardCharsets.html пишется, что этот класс доступен с версии JVM 1.7. У меня на компьютере стоит версия 1.7.0_71, в Oracle стоит 1.4. Теперь буду работать в этом направлении.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не вызывается java-класс
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]