Запись файла docx в BLOB с использованием Java 1.4 внутри Oracle 10g - PullRequest
2 голосов
/ 10 марта 2010

Я пытаюсь сгенерировать пустой файл docx с использованием Java, добавить текст, а затем записать его в большой двоичный объект, который я могу вернуть нашему механизму обработки документов (пользовательский беспорядок PL / SQL и Java). Я должен использовать 1.4 JVM внутри Oracle 10g, так что нет никаких вещей Java 1.5. У меня нет проблем с записью docx в файл на моей локальной машине, но когда я пытаюсь записать в BLOB, я получаю мусор. Я делаю что-то глупое? Любая помощь приветствуется. Обратите внимание, что в приведенном ниже коде все методы get [name] Xml () возвращают org.w3c.dom.Document.

public void save(String fileName) throws Exception {
    ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(fileName));
    addEntry(zos, getDocumentXml(), "word/document.xml");
    addEntry(zos, getContentTypesXml(), "[Content_Types].xml");
    addEntry(zos, getRelsXml(), "_rels/.rels");
    zos.flush();
    zos.close();
}

public java.sql.BLOB save() throws Exception {
    java.sql.Connection conn = DbUtilities.openConnection();
    BLOB outBlob = BLOB.createTemporary(conn, true, BLOB.DURATION_SESSION);
    outBlob.open(BLOB.MODE_READWRITE);
    ZipOutputStream zos = new ZipOutputStream(outBlob.setBinaryStream(0L));
    addEntry(zos, getDocumentXml(), "word/document.xml");
    addEntry(zos, getContentTypesXml(), "[Content_Types].xml");
    addEntry(zos, getRelsXml(), "_rels/.rels");
    zos.flush();
    zos.close();
    return outBlob;
}

private void addEntry(ZipOutputStream zos, Document doc, String fileName) throws Exception {
    Transformer t = TransformerFactory.newInstance().newTransformer();
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    t.transform(new DOMSource(doc), new StreamResult(baos));
    ZipEntry ze = new ZipEntry(fileName);
    byte[] data = baos.toByteArray();
    ze.setSize(data.length);
    zos.putNextEntry(ze);
    zos.write(data);
    zos.flush();
    zos.closeEntry();
}

1 Ответ

0 голосов
/ 12 марта 2010

Похоже, проблема была в нашем движке обработки документов. Это ожидало застегнутого документа. Рад, что мы хорошо документировали наш код.

В любом случае, спасибо всем, кто посмотрел на мою проблему.

...