[
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