hi every body
Oracle Release 12.2.0.1.0
POI version 3.16
SELECT DBMS_JAVA.get_ojvm_property(PROPSTRING => 'java.version') from dual;
1.8.0_121
I want to load POI jar files to oracle database and then create a class java to create/read msword file from oracle database.
These are steps i made to achieve that:
First give permission to user COMMON_DATA on POI jar files.
-- connect as sys
begin
dbms_java.grant_permission( 'COMMON_DATA', 'SYS:java.io.FilePermission', 'D:\DB12C2\admin\orcl\dpdump\commons-codec-1.10.jar', 'read' );
end;
/
begin
dbms_java.grant_permission( 'COMMON_DATA', 'SYS:java.io.FilePermission', 'D:\DB12C2\admin\orcl\dpdump\xmlbeans-2.6.0.jar', 'read' );
end;
/
begin
dbms_java.grant_permission( 'COMMON_DATA', 'SYS:java.io.FilePermission', 'D:\DB12C2\admin\orcl\dpdump\poi-3.16.jar', 'read' );
end;
/
begin
dbms_java.grant_permission( 'COMMON_DATA', 'SYS:java.io.FilePermission', 'D:\DB12C2\admin\orcl\dpdump\poi-ooxml-3.16.jar', 'read' );
end;
/
begin
dbms_java.grant_permission( 'COMMON_DATA', 'SYS:java.io.FilePermission', 'D:\DB12C2\admin\orcl\dpdump\poi-ooxml-schemas-3.16.jar', 'read' );
end;
Second load these jar files into oracle database:
-- connect as COMMON_DATA
BEGIN
DBMS_JAVA.loadjava('D:\DB12C2\admin\orcl\dpdump\commons-codec-1.10.jar -verbose -resolve -force -genmissing');
COMMIT;
END;
/
BEGIN
DBMS_JAVA.loadjava('D:\DB12C2\admin\orcl\dpdump\xmlbeans-2.6.0.jar -verbose -resolve -force -genmissing');
COMMIT;
END;
/
BEGIN
DBMS_JAVA.loadjava('D:\DB12C2\admin\orcl\dpdump\poi-3.16.jar -verbose -resolve -force -genmissing');
COMMIT;
END;
/
BEGIN
DBMS_JAVA.loadjava('D:\DB12C2\admin\orcl\dpdump\poi-ooxml-3.16.jar -verbose -resolve -force -genmissing');
COMMIT;
END;
/
BEGIN
DBMS_JAVA.loadjava('D:\DB12C2\admin\orcl\dpdump\poi-ooxml-schemas-3.16.jar -verbose -resolve -force -genmissing');
COMMIT;
END;
then i create oracle java source to read readdoc.docx file:
CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED COMMON_DATA."WordReader" as import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFTable;
public class WordReader {
public static void readWord() throws FileNotFoundException, IOException {
String path = "D:\\DB12C2\\admin\\orcl\\dpdump\\readdoc.docx";
XWPFDocument doc;
File file;
FileInputStream fis = null;
try {
file = new File(path);
fis = new FileInputStream(file);
doc = new XWPFDocument(fis);
List<XWPFTable> tables = doc.getTables();
System.out.println(tables.get(0).getRow(1).getCell(0).getText());
}
finally {
try {
if(fis != null) {
fis.close();
fis = null;
}
}
catch(IOException ioEx) {
}
}
}
}
/
then i create an oracle procedure to call previous oracle java source :
CREATE OR REPLACE procedure COMMON_DATA.java_read_word
is language java
name 'WordReader.readWord()';
/
then i call previous procedure :
execute COMMON_DATA.java_read_word;
which give me this error :
ORA-29532: Java call terminated by uncaught Java exception: java.lang.VerifyError: (class: org/apache/poi/xwpf/usermodel/XWPFDocument, method: onDocumentRead signature: ()V) catch_type not a subclass of Throwable
ORA-06512: at "COMMON_DATA.JAVA_READ_WORD", line 1
ORA-06512: at line 1
can any body help please to solve this problem.
Thanks
Maher