Нет поставщика для ошибки imaps в хранимой процедуре Java - PullRequest
0 голосов
/ 15 декабря 2018

Я пытаюсь получать электронные письма из своего почтового ящика, используя класс Java, сохраненный в базе данных Oracle.В настоящее время я использую Oracle Database 12.2.

Это мой исходный код Java:

import java.io.IOException;
import java.sql.SQLException;
import java.util.Properties;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMultipart;


public class GmailInbox {

    public static void main(String[] args) 
    throws SQLException, MessagingException, IOException 
    {
        read();
    }

    public static String read() 
    throws SQLException, MessagingException, IOException 
    { 
      Properties props = new Properties();
      Session session = Session.getDefaultInstance(props, null);
      Store store = session.getStore("imaps");
      store.connect("smtp.gmail.com", "*********@gmail.com","password");
      Folder inbox = store.getFolder("inbox");
      inbox.open(Folder.READ_ONLY);

      int messageCount = inbox.getMessageCount();
      System.out.println("Total Messages:- " + messageCount);

      Message[] messages = inbox.getMessages();

      System.out.println("------------------------------");

      for (int i = messages.length - 1; i >= messages.length-3 ; i--) {
          Message message = messages[i];
          System.out.println("---------------------------------");  
          System.out.println("Email Number " + (i + 1));  
          System.out.println("Subject: " + message.getSubject()); 
          System.out.println("Date: " + message.getReceivedDate()); 
          System.out.println("From: " + InternetAddress.toString(message.getFrom())); 
      }
      inbox.close(true);
      store.close();

      return("Done");
 }

}

Он отлично работает в Eclipse IDE.

Я загрузил этот источник Java в базу данных*1001*

loadjava -user <user>/<password> -verbose -resolve <path_to_java_code>

И класс, и источник "VALID".

select DBMS_JAVA.LONGNAME(OBJECT_NAME) as object_name,
       object_type,
       status,
from user_objects
where object_type like 'JAVA%';

После этого я создал функцию:

create or replace function TestGmail
return varchar2
is language java name
'GmailInbox.read() return String';

Наконец, когда япытаюсь выполнить этот класс в Oracle с помощью этого кода:

declare 
output varchar2(50);
begin 
  output := TestGmail;
  dbms_output.put_line(output);
end;

Я получаю сообщение об ошибке:

ORA-29532: вызов Java завершен из-за невыполненного исключения Java:javax.mail.NoSuchProviderException: нет провайдера для изображений

Есть ли способ избежать этой ошибки?

1 Ответ

0 голосов
/ 16 декабря 2018

Используйте утилиту loadjava для хранения необходимых зависимостей (которые, как представляется, javax.mail.jar) в базе данных, чтобы Oracle мог найти их по своему пути к классам.

Например,:

loadjava -user <user>/<password> -resolve javax.mail.jar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...