[ https://issues.apache.org/jira/browse/OFBIZ-5047?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13482136#comment-13482136 ]
Jacques Le Roux commented on OFBIZ-5047: ---------------------------------------- Hi Chung, Please try this patch: {code} Index: framework/webtools/webapp/webtools/WEB-INF/actions/entity/XmlDsDump.groovy =================================================================== --- framework/webtools/webapp/webtools/WEB-INF/actions/entity/XmlDsDump.groovy (revision 1401164) +++ framework/webtools/webapp/webtools/WEB-INF/actions/entity/XmlDsDump.groovy (working copy) @@ -34,7 +34,8 @@ filename = parameters.filename; maxRecStr = parameters.maxrecords; entitySyncId = parameters.entitySyncId; -passedEntityNames = parameters.entityName instanceof Collection ? parameters.entityName as TreeSet : [parameters.entityName] as TreeSet; +passedEntityNames = null; +if (parameters.entityName) passedEntityNames = parameters.entityName instanceof Collection ? parameters.entityName as TreeSet : [parameters.entityName] as TreeSet; // get the max records per file setting and convert to a int maxRecordsPerFile = 0; @@ -179,151 +180,153 @@ modelEntities = reader.getEntityCache().values() as TreeSet; context.modelEntities = modelEntities; -if (tobrowser) { - session.setAttribute("xmlrawdump_entitylist", passedEntityNames); - session.setAttribute("entityDateCond", entityDateCond); -} else { - efo = new EntityFindOptions(true, EntityFindOptions.TYPE_SCROLL_INSENSITIVE, EntityFindOptions.CONCUR_READ_ONLY, true); - numberOfEntities = passedEntityNames?.size() ?: 0; - context.numberOfEntities = numberOfEntities; - numberWritten = 0; - - // single file - if (filename && numberOfEntities) { - writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filename), "UTF-8"))); - writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); - writer.println("<entity-engine-xml>"); - - passedEntityNames.each { curEntityName -> - if (entityFrom) { - curModelEntity = reader.getModelEntity(curEntityName); - if (curModelEntity instanceof ModelViewEntity) { - return; - } - } - - beganTransaction = TransactionUtil.begin(3600); - try { - me = reader.getModelEntity(curEntityName); - if (me.getNoAutoStamp() || me instanceof ModelViewEntity) { - values = delegator.find(curEntityName, null, null, null, me.getPkFieldNames(), efo); - } else { - values = delegator.find(curEntityName, entityDateCond, null, null, UtilMisc.toList("-createdTxStamp"), efo); - } - - curNumberWritten = 0; - while (value = values.next()) { - value.writeXmlText(writer, ""); - numberWritten++; - curNumberWritten++; - if (curNumberWritten % 500 == 0 || curNumberWritten == 1) { - Debug.log("Records written [$curEntityName]: $curNumberWritten Total: $numberWritten"); +if (passedEntityNames) { + if (tobrowser) { + session.setAttribute("xmlrawdump_entitylist", passedEntityNames); + session.setAttribute("entityDateCond", entityDateCond); + } else { + efo = new EntityFindOptions(true, EntityFindOptions.TYPE_SCROLL_INSENSITIVE, EntityFindOptions.CONCUR_READ_ONLY, true); + numberOfEntities = passedEntityNames?.size() ?: 0; + context.numberOfEntities = numberOfEntities; + numberWritten = 0; + + // single file + if (filename && numberOfEntities) { + writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filename), "UTF-8"))); + writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); + writer.println("<entity-engine-xml>"); + + passedEntityNames.each { curEntityName -> + if (entityFrom) { + curModelEntity = reader.getModelEntity(curEntityName); + if (curModelEntity instanceof ModelViewEntity) { + return; } } - values.close(); - Debug.log("Wrote [$curNumberWritten] from entity : $curEntityName"); - TransactionUtil.commit(beganTransaction); - } catch (Exception e) { - errMsg = "Error reading data for XML export:"; - Debug.logError(e, errMsg, "JSP"); - TransactionUtil.rollback(beganTransaction, errMsg, e); - } - } - writer.println("</entity-engine-xml>"); - writer.close(); - Debug.log("Total records written from all entities: $numberWritten"); - context.numberWritten = numberWritten; - } - - // multiple files in a directory - results = []; - fileNumber = 1; - context.results = results; - if (outpath) { - outdir = new File(outpath); - if (!outdir.exists()) { - outdir.mkdir(); - } - if (outdir.isDirectory() && outdir.canWrite()) { - passedEntityNames.each { curEntityName -> - numberWritten = 0; - fileName = preConfiguredSetName ? UtilFormatOut.formatPaddedNumber((long) fileNumber, 3) + "_" : ""; - fileName = fileName + curEntityName; - - values = null; - beganTransaction = false; + + beganTransaction = TransactionUtil.begin(3600); try { - beganTransaction = TransactionUtil.begin(3600); - - me = delegator.getModelEntity(curEntityName); - if (me instanceof ModelViewEntity) { - results.add("[$fileNumber] [vvv] $curEntityName skipping view entity"); - return; - } + me = reader.getModelEntity(curEntityName); if (me.getNoAutoStamp() || me instanceof ModelViewEntity) { values = delegator.find(curEntityName, null, null, null, me.getPkFieldNames(), efo); } else { - values = delegator.find(curEntityName, entityDateCond, null, null, me.getPkFieldNames(), efo); + values = delegator.find(curEntityName, entityDateCond, null, null, UtilMisc.toList("-createdTxStamp"), efo); } - isFirst = true; - writer = null; - fileSplitNumber = 1; + + curNumberWritten = 0; while (value = values.next()) { - //Don't bother writing the file if there's nothing - //to put into it - if (isFirst) { - writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(outdir, fileName +".xml")), "UTF-8"))); - writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); - writer.println("<entity-engine-xml>"); - isFirst = false; - } value.writeXmlText(writer, ""); numberWritten++; - - // split into small files - if (maxRecordsPerFile > 0 && (numberWritten % maxRecordsPerFile == 0)) { - fileSplitNumber++; - // close the file + curNumberWritten++; + if (curNumberWritten % 500 == 0 || curNumberWritten == 1) { + Debug.log("Records written [$curEntityName]: $curNumberWritten Total: $numberWritten"); + } + } + values.close(); + Debug.log("Wrote [$curNumberWritten] from entity : $curEntityName"); + TransactionUtil.commit(beganTransaction); + } catch (Exception e) { + errMsg = "Error reading data for XML export:"; + Debug.logError(e, errMsg, "JSP"); + TransactionUtil.rollback(beganTransaction, errMsg, e); + } + } + writer.println("</entity-engine-xml>"); + writer.close(); + Debug.log("Total records written from all entities: $numberWritten"); + context.numberWritten = numberWritten; + } + + // multiple files in a directory + results = []; + fileNumber = 1; + context.results = results; + if (outpath) { + outdir = new File(outpath); + if (!outdir.exists()) { + outdir.mkdir(); + } + if (outdir.isDirectory() && outdir.canWrite()) { + passedEntityNames.each { curEntityName -> + numberWritten = 0; + fileName = preConfiguredSetName ? UtilFormatOut.formatPaddedNumber((long) fileNumber, 3) + "_" : ""; + fileName = fileName + curEntityName; + + values = null; + beganTransaction = false; + try { + beganTransaction = TransactionUtil.begin(3600); + + me = delegator.getModelEntity(curEntityName); + if (me instanceof ModelViewEntity) { + results.add("[$fileNumber] [vvv] $curEntityName skipping view entity"); + return; + } + if (me.getNoAutoStamp() || me instanceof ModelViewEntity) { + values = delegator.find(curEntityName, null, null, null, me.getPkFieldNames(), efo); + } else { + values = delegator.find(curEntityName, entityDateCond, null, null, me.getPkFieldNames(), efo); + } + isFirst = true; + writer = null; + fileSplitNumber = 1; + while (value = values.next()) { + //Don't bother writing the file if there's nothing + //to put into it + if (isFirst) { + writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(outdir, fileName +".xml")), "UTF-8"))); + writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); + writer.println("<entity-engine-xml>"); + isFirst = false; + } + value.writeXmlText(writer, ""); + numberWritten++; + + // split into small files + if (maxRecordsPerFile > 0 && (numberWritten % maxRecordsPerFile == 0)) { + fileSplitNumber++; + // close the file + writer.println("</entity-engine-xml>"); + writer.close(); + + // create a new file + splitNumStr = UtilFormatOut.formatPaddedNumber((long) fileSplitNumber, 3); + writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(outdir, fileName + "_" + splitNumStr +".xml")), "UTF-8"))); + writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); + writer.println("<entity-engine-xml>"); + } + + if (numberWritten % 500 == 0 || numberWritten == 1) { + Debug.log("Records written [$curEntityName]: $numberWritten"); + } + + } + if (writer) { writer.println("</entity-engine-xml>"); writer.close(); - - // create a new file - splitNumStr = UtilFormatOut.formatPaddedNumber((long) fileSplitNumber, 3); - writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(outdir, fileName + "_" + splitNumStr +".xml")), "UTF-8"))); - writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); - writer.println("<entity-engine-xml>"); + String thisResult = "[$fileNumber] [$numberWritten] $curEntityName wrote $numberWritten records"; + Debug.log(thisResult); + results.add(thisResult); + } else { + thisResult = "[$fileNumber] [---] $curEntityName has no records, not writing file"; + Debug.log(thisResult); + results.add(thisResult); } - - if (numberWritten % 500 == 0 || numberWritten == 1) { - Debug.log("Records written [$curEntityName]: $numberWritten"); + values.close(); + } catch (Exception ex) { + if (values != null) { + values.close(); } - - } - if (writer) { - writer.println("</entity-engine-xml>"); - writer.close(); - String thisResult = "[$fileNumber] [$numberWritten] $curEntityName wrote $numberWritten records"; + thisResult = "[$fileNumber] [xxx] Error when writing $curEntityName: $ex"; Debug.log(thisResult); results.add(thisResult); - } else { - thisResult = "[$fileNumber] [---] $curEntityName has no records, not writing file"; - Debug.log(thisResult); - results.add(thisResult); + TransactionUtil.rollback(beganTransaction, thisResult, ex); + } finally { + // only commit the transaction if we started one... this will throw an exception if it fails + TransactionUtil.commit(beganTransaction); } - values.close(); - } catch (Exception ex) { - if (values != null) { - values.close(); - } - thisResult = "[$fileNumber] [xxx] Error when writing $curEntityName: $ex"; - Debug.log(thisResult); - results.add(thisResult); - TransactionUtil.rollback(beganTransaction, thisResult, ex); - } finally { - // only commit the transaction if we started one... this will throw an exception if it fails - TransactionUtil.commit(beganTransaction); + fileNumber++; } - fileNumber++; } } } {code} > Import/export > ------------- > > Key: OFBIZ-5047 > URL: https://issues.apache.org/jira/browse/OFBIZ-5047 > Project: OFBiz > Issue Type: Bug > Components: framework > Affects Versions: Release Branch 12.04 > Environment: ubuntu 12_4, ofBIZ_12_4 > Reporter: sergio kosik > Assignee: Jacques Le Roux > Attachments: ofbiz_result_screen.png, start_screen.png > > Original Estimate: 2h > Remaining Estimate: 2h > > I just check out code from SVN, > - invoked <ant load-demo> command and > - just tried invoke Import/export functionality from backoffice page > The Faield :ERROR MESSAGE: was result: > https://localhost:8443/webtools/control/xmldsdump > org.ofbiz.widget.screen.ScreenRenderException: Error rendering screen > [component://webtools/widget/EntityScreens.xml#xmldsdump]: > java.lang.IllegalArgumentException: Error running script at location > [component://webtools/webapp/webtools/WEB-INF/actions/entity/XmlDsDump.groovy]: > javax.script.ScriptException: > org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast > object '[null]' with class 'java.util.ArrayList' to class 'java.util.TreeSet' > due to: java.lang.NullPointerException (Error running script at location > [component://webtools/webapp/webtools/WEB-INF/actions/entity/XmlDsDump.groovy]: > javax.script.ScriptException: > org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast > object '[null]' with class 'java.util.ArrayList' to class 'java.util.TreeSet' > due to: java.lang.NullPointerException) > ---- stack trace > --------------------------------------------------------------- > java.lang.IllegalArgumentException: Error running script at location > [component://webtools/webapp/webtools/WEB-INF/actions/entity/XmlDsDump.groovy]: > javax.script.ScriptException: > org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast > object '[null]' with class 'java.util.ArrayList' to class 'java.util.TreeSet' > due to: java.lang.NullPointerException > org.ofbiz.base.util.ScriptUtil.executeScript(ScriptUtil.java:348) > org.ofbiz.base.util.ScriptUtil.executeScript(ScriptUtil.java:324) > org.ofbiz.widget.ModelWidgetAction$Script.runAction(ModelWidgetAction.java:416) > org.ofbiz.widget.ModelWidgetAction.runSubActions(ModelWidgetAction.java:116) > org.ofbiz.widget.screen.ModelScreenWidget$Section.renderWidgetString(ModelScreenWidget.java:184) > org.ofbiz.widget.screen.ModelScreen.renderScreenString(ModelScreen.java:396) > org.ofbiz.widget.screen.ScreenRenderer.render(ScreenRenderer.java:135) > org.ofbiz.widget.screen.ScreenRenderer.render(ScreenRenderer.java:97) > org.ofbiz.widget.screen.MacroScreenViewHandler.render(MacroScreenViewHandler.java:104) > org.ofbiz.webapp.control.RequestHandler.renderView(RequestHandler.java:864) > org.ofbiz.webapp.control.RequestHandler.doRequest(RequestHandler.java:581) > org.ofbiz.webapp.control.ControlServlet.doGet(ControlServlet.java:224) > javax.servlet.http.HttpServlet.service(HttpServlet.java:621) > javax.servlet.http.HttpServlet.service(HttpServlet.java:722) > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) > org.ofbiz.webapp.control.ContextFilter.doFilter(ContextFilter.java:337) > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) > org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) > org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) > org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999) > org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565) > org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309) > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) > java.lang.Thread.run(Thread.java:722) > ---------------------------------------------------------------------------- > I will check it for 11_x release soon -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira