Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / MS Word в blob, Apache POI и JSP / 5 сообщений из 5, страница 1 из 1
24.05.2013, 20:30:33
    #38272836
wassaby
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS Word в blob, Apache POI и JSP
Всем доброго времени суток, уважаемые форумчане. Разрабатываю последнюю часть дипломного проекта и встрял. Суть такова: в БД Oracle есть таблица T_FILE (id, name, content_type, size, data (blob)), в которой хранятся документы Word и необходимо вывести содержимое документа на страницу jsp, что-то вроде онлайн читалки. Скачал и подключил к проекту библиотеки apache poi.

На данный момент я пытаюсь это реализовать следующим образом:
Action, который выполняет функцию получения данных с таблицы БД:
Код: java
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.
public class TestStudentReading extends AbstractStudentAction {
	public TestStudentReading() {
		super();
	}

	@Override
	protected ActionForward executeStudentAction(ActionMapping mapping,
			ActionForm form, HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		Logger log = Logger.getLogger(TestStudentReading.class);
		HttpSession session = request.getSession(true);
		DownloadFileForm download = (DownloadFileForm)form;
		IBFile file = null;

		WordExtractor extractor = null;

		InputStream in = null;
		FileInputStream fis = null;
		
		try {
			IComponentFactory manager = (IComponentFactory) getServlet()
					.getServletContext().getAttribute(
							WebTemplateConstants.MANAGER_ATTR);
			file = manager.getActionFile();
			BFileInfo fileInfo = file.getFile(download.getId());

			byte[] doc = fileInfo.getData();
			in.read(doc);
			
			HWPFDocument document = new HWPFDocument(in);

			extractor = new WordExtractor(document);
			String[] fileData = extractor.getParagraphText();
			request.setAttribute(WebTemplateConstants.READING, fileData);

		} catch (CommonsBeansException e) {
			log.error("Could not get file", e);
			StrutsUtils.processErrors(request, e.getErrorCode(),
					e.getMessageKey());
			return mapping.findForward(StrutsHelperConstants.ERROR_FORWARD);
		}
		return mapping.findForward("success");
	}
}



Страница JSP:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<%@page import="java.io.*"%>
<%@page import="org.apache.poi.poifs.filesystem.POIFSFileSystem"%>
<%@page import="org.apache.poi.hssf.record.*"%>
<%@page import="org.apache.poi.hssf.model.*"%>
<%@page import="org.apache.poi.hssf.usermodel.*"%>
<%@page import="org.apache.poi.hssf.util.*"%>

<h4>Чтение файла</h4>

<%
	String[] doc = (String[])request.getAttribute(WebTemplateConstants.READING);
		  for (int i = 0; i < doc.length; i++) {
				if (doc[i] != null)%>
				 <p align="center"><%= doc[i]%></p>
			<%};%> 



При переходе на страницу JSP выдает ошибку java.lang.NullPointerException на этом месте в Action'е:
Код: java
1.
in.read(doc);



Спасибо.
Проект в Eclipse, использую tomcat, struts.
...
Рейтинг: 0 / 0
24.05.2013, 20:58:09
    #38272850
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS Word в blob, Apache POI и JSP
Как это по вашему должно работать?
Код: java
1.
2.
InputStream in = null;
in.read(doc);
...
Рейтинг: 0 / 0
24.05.2013, 22:25:58
    #38272891
wassaby
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS Word в blob, Apache POI и JSP
Blazkowicz,

Совершенно верно, я тоже уже это обнаружил (ужасно сглупил). Сейчас пытаюсь теперь из этого потока байтов сделать файл и потом уже пользоваться POI. Спасибо.
...
Рейтинг: 0 / 0
24.05.2013, 23:12:12
    #38272913
wassaby
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS Word в blob, Apache POI и JSP
Blazkowicz,

Я собрал все в одном java классе, дабы было проще следить за ходом исполнения команд.

Код: java
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.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ReadBlob {
	private static long id;
	private static String name;
	private static byte[] data;
	private static String contentType;
	private static long size;
	
	public static void main(String[] args) throws Exception {
		WordExtractor extr = null;
		File source = null;
		File sink = null;
		FileOutputStream out = null;
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		String url = "jdbc:oracle:thin:@192.168.80.10:1521:orcl";
		String login = "diplom";
		String password = "diplom";
		System.out.println("\nResult:");
		try {
			Connection conn = DriverManager.getConnection(url, login, password);
			PreparedStatement pstmt = conn
					.prepareStatement("select t.id, t.name, t.p_size, t.p_data, t.content_type from t_file t where t.id = 281");
			ResultSet rs = pstmt.executeQuery();
			if (rs.next()) {
				id = rs.getLong(1);
				System.out.println("\n File's ID = " + id);
				name = rs.getString(2);
				System.out.println(" File's name is = " + name);
				size = rs.getLong(3);
				System.out.println(" File's size is = " + size);
				data = rs.getBytes(4);
				contentType = rs.getString(5);
				System.out.println(" File's type is = " + contentType);
			}
			pstmt.close();
			conn.close();
			out = new FileOutputStream(source);
			out.write(data);
			out.close();
			FileInputStream inStream = new FileInputStream(source);
    	    FileOutputStream outStream = new FileOutputStream(sink);
    	    inStream.close();
			extr = new WordExtractor(inStream);
			String[] fileData = extr.getParagraphText();
			for (int i = 0; i < fileData.length; i++) {
				if (fileData[i] != null)
					System.out.println(fileData[i]);
			}
		} catch (SQLException e) {
			System.out.println("SQL Exception handled " + e);
			e.printStackTrace();
		} catch (IOException io) {
			System.out.println("IO Exception handled " + io);
			io.printStackTrace();
		}
	}
}



Я полученный массив байтов записываю в source
Код: java
1.
2.
3.
out = new FileOutputStream(source);
out.write(data);
out.close();


То есть source у меня как файл, верно?
Теперь я этот файл ложу в поток, чтобы extr могла с ним работать.
Код: java
1.
2.
3.
FileOutputStream outStream = new FileOutputStream(sink);
inStream.close();
extr = new WordExtractor(inStream);


Но ничего не получается. Что я делаю не так?
...
Рейтинг: 0 / 0
24.05.2013, 23:55:02
    #38272937
wassaby
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS Word в blob, Apache POI и JSP
Решено. Тема закрыта. Кому вдруг поможет, то вот
Код: java
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.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ReadBlob {
	private static long id;
	private static String name;
	private static byte[] data;
	private static String contentType;
	private static long size;
	
	public static void main(String[] args) throws Exception {
		WordExtractor extr = null;
		FileOutputStream out = null;
		InputStreamReader isr = null;
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		String url = "jdbc:oracle:thin:@192.168.80.10:1521:orcl";
		String login = "diplom";
		String password = "diplom";
		System.out.println("\nResult:");
		try {
			Connection conn = DriverManager.getConnection(url, login, password);
			PreparedStatement pstmt = conn
					.prepareStatement("select t.id, t.name, t.p_size, t.p_data, t.content_type from t_file t where t.id = 301");
			ResultSet rs = pstmt.executeQuery();
			if (rs.next()) {
				id = rs.getLong(1);
				System.out.println("\n File's ID = " + id);
				name = rs.getString(2);
				System.out.println(" File's name is = " + name);
				size = rs.getLong(3);
				System.out.println(" File's size is = " + size);
				data = rs.getBytes(4);
				System.out.println(" File's data is = " + data.length);
				contentType = rs.getString(5);
				System.out.println(" File's type is = " + contentType);
			}
			pstmt.close();
			conn.close();
			out = new FileOutputStream("data");
			out.write(data);
			out.close();
			FileInputStream inStream = new FileInputStream("data");
			extr = new WordExtractor(inStream);
			String[] fileData = extr.getParagraphText();
			for (int i = 0; i < fileData.length; i++) {
				if (fileData[i] != null)
					System.out.println(fileData[i]);
			}
		} catch (SQLException e) {
			System.out.println("SQL Exception handled " + e);
			e.printStackTrace();
		} catch (IOException io) {
			System.out.println("IO Exception handled " + io);
			io.printStackTrace();
		}
	}
}
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / MS Word в blob, Apache POI и JSP / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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