I have a muti-threaded application that processes document mostly
asynchronous. I synchronize all UnoRuntime.* API calls, but not such calls
as setting a table cell's value, etc. Everything runs fine in development,
qa and in a production environment for one our clients. We have another
client, however, where we are experience a complete breakdown. While
processing, we continually get the following exception. Both clients are
running version 3.3 of OpenOffice/UNO. Has anyone experienced this or is
there a way to get more information/debug OpenOffice?
Here is how OpenOffice is launched from bootstrapconnector:
C:\Program Files\OpenOffice.org 3\program\soffice.exe -nologo -nodefault
-norestore -nocrashreport -nolockcheck -headless -nofirststartwizard
-accept=pipe,name=uno3869894507064209706;urp;
Here is the RuntimeException:
com.sun.star.uno.RuntimeException: [msci_uno bridge error] UNO type of C++
exception unknown: "std.bad_alloc", RTTI-name=".?AVbad_alloc@std@@"!
at
com.sun.star.lib.uno.environments.remote.Job.remoteUnoRequestRaisedException(Job.java:177)
at com.sun.star.lib.uno.environments.remote.Job.execute(Job.java:143)
at
com.sun.star.lib.uno.environments.remote.JobQueue.enter(JobQueue.java:335)
at
com.sun.star.lib.uno.environments.remote.JobQueue.enter(JobQueue.java:304)
at
com.sun.star.lib.uno.environments.remote.JavaThreadPool.enter(JavaThreadPool.java:91)
at
com.sun.star.lib.uno.bridges.java_remote.java_remote_bridge.sendRequest(java_remote_bridge.java:639)
at
com.sun.star.lib.uno.bridges.java_remote.ProxyFactory$Handler.request(ProxyFactory.java:151)
at
com.sun.star.lib.uno.bridges.java_remote.ProxyFactory$Handler.invoke(ProxyFactory.java:133)
at $Proxy27.storeToURL(Unknown Source)
at com.company.ooo.FileManager.componentExport(FileManager.java:135)
at com.company.util.PDFGenerator.generatePDF(PDFGenerator.java:183)
at
com.company.util.PDFGenerator.generateSinglePDFFromDocumentList(PDFGenerator.java:106)
at
com.company.service.processor.DefaultPDFStoreServiceProcessorNG.process(DefaultPDFStoreServiceProcessorNG.java:161)
at
com.company.service.DefaultPDFStoreService.process(DefaultPDFStoreService.java:38)
at com.company.core.PrintServiceThread.run(PrintServiceThread.java:129)
Apr 25, 2011 9:59:16 AM com.company.util.SyslogUtil logEvent
I'm attempting to export a PDF file named
C:/COMPANY/temp/d7255f23-f2da-42ad-972e-3fda3e42b066.pdf with the following:
public static void componentExport(XComponent xComponent, PropertyValue[]
properties, String storeFile) throws DocumentException {
XStorable xStorable = null;
synchronized (accessLock) {
try {
xStorable = (XStorable)
UnoRuntime.queryInterface(XStorable.class, xComponent);
xStorable.storeToURL("file:///" + storeFile, properties);
} catch (com.sun.star.uno.RuntimeException e) {
xStorable = null;
xRemoteContext = null; // OOo will be relaunched
xRemoteServiceManager = null;
e.printStackTrace();
throw new DocumentException("Failed to store file: " +
storeFile, e);
} catch (java.lang.Exception e) {
xStorable = null;
throw new DocumentException("Failed to store file: " +
storeFile, e);
}
}
xStorable = null;
}
public class PDFGenerator {
private PropertyValue[] pdfStoreProps;
public PDFGenerator(){
PropertyValue[] filterData = new PropertyValue[2];
filterData[0] = new PropertyValue();
filterData[0].Name = "UseLosslessCompression";
filterData[0].Value = Boolean.FALSE;
filterData[1] = new PropertyValue();
filterData[1].Name = "ExportFormFields";
filterData[1].Value = Boolean.FALSE;
pdfStoreProps = new PropertyValue[4];
pdfStoreProps[0] = new PropertyValue();
pdfStoreProps[0].Name = "FilterName";
pdfStoreProps[0].Value = DocumentType.WRITER_PDF_EXPORT;
pdfStoreProps[1] = new PropertyValue();
pdfStoreProps[1].Name = "Pages";
pdfStoreProps[1].Value = "All";
pdfStoreProps[2] = new PropertyValue();
pdfStoreProps[2].Name = "Overwrite";
pdfStoreProps[2].Value = Boolean.TRUE;
pdfStoreProps[3] = new PropertyValue();
pdfStoreProps[3].Name = "FilterData";
pdfStoreProps[3].Value = filterData;
}
/**
* Generates one PDF from all the documents
* @param copies The number of document copies to be generated
* @param documents A hashtable holding the documents as XComponent
* @param path The folder where the PDF will be stored
* @param fileName The name of the PDF to be generated
*/
public final PrintProcessStatus generateSinglePDFFromDocumentList(int
copies,
LinkedList<TextDocumentReference> documents,
String path,
String fileName) {
//sets up the save properties to save the documents as PDFs
PrintProcessStatus returnStatus;
if (!path.endsWith("/")) {
path = path.concat("/");
}
PropertyValue[] loadProps = FileManager.createPropertyValueArray(
FileManager.createPropertyValue("AsTemplate", new
Any(Type.BOOLEAN, Boolean.TRUE)),
FileManager.createPropertyValue("Hidden", new
Any(Type.BOOLEAN, Boolean.TRUE)));
ArrayList<String> PDFFiles = new ArrayList<String>();
//Saves the Files out as PDFs and records the file names
try {
for (int count = 1; count <= copies; count++) {
for (TextDocumentReference xc : documents) {
String filePath=null;
if
(xc.getDocumentName().toLowerCase().endsWith(".pdf")){
filePath = xc.getDocumentName();
} else {
XComponent xcomp =
FileManager.componentImport(xc.getDocumentName(), loadProps);
filePath = generatePDF(xcomp, path, null);
try {
FileManager.closeComponent(xcomp);
} catch (DisposedException de){
SyslogUtil.logEvent("Could not close document "
+ xc.getDocumentName(), de);
}
}
PDFFiles.add(filePath);
}
}
// HERE - Generates a new PDF and combines all the PDFs into one
} catch (Exception ex) {
SyslogUtil.logEvent(null, ex);
File f = new File(path + fileName + ".pdf");
try {
if (f.exists()) {
f.delete();
}
} catch (SecurityException e) {
SyslogUtil.logEvent(null, ex);
}
f = null;
returnStatus = PrintProcessStatus.FAILED;
}
//Deletes all the PDFs that were made from the documents
for (String s : PDFFiles) {
File f = new File(s);
try {
if (f.exists()) {
f.delete();
}
} catch (SecurityException e) {
SyslogUtil.logEvent("Could not delete PDF file " + s,
null);
}
f = null;
}
return returnStatus;
}
/**
*
* @param xc The XComponent to be saved as a PDF
* @param directoryPath The directory path which the file will be stored
* @param fileName The file name of the PDF. If fileName is null, a
unique Id will be generated
* @return Returns the full file path (C:\somedirectory\somefile.pdf)
*/
public String generatePDF(XComponent xc, String directoryPath, String
fileName)
throws com.sun.star.io.IOException, DocumentException {
String realFileName = (fileName == null) ?
UUID.randomUUID().toString() : fileName;
String filePath = directoryPath + realFileName + ".pdf";
try {
FileManager.componentExport(xc, pdfStoreProps, filePath);
} catch (DocumentException ex) {
throw ex;
} catch (Exception ex) {
throw new DocumentException(ex);
}
return filePath;
}
}
--
-----------------------------------------------------------------
To unsubscribe send email to [email protected]
For additional commands send email to [email protected]
with Subject: help