Perhaps this is a change that requires me to change the samples
(non-backward compatible) but if so I'm not aware of it.
The most recent changes to ESQL break the POI statetax2.sample
(http://localhost:8080/cocoon/samples/poi/statetax2.xls).
I reverted the
./org/apache/cocoon/components/language/markup/xsp/java/esql.xsl to
version 1.20 (the revision prior to the last)
src/java/org/apache/cocoon/components/language/markup/xsp/EsqlQuery.java
to version 1.14 (the same version to match)
And the samples began to work. This seems to have something to do with
grouping.
BTW, I noticed the samples pages aren't working directly because the
trailing "/" is not there. (I'd supply a patch but its probably
faster for a committer to just fix that than download, check and apply a
patch)
Is there a change I need to make to the samples to make them work from
now on due to backwards incompatibility or is this the result of a bug?
Thanks,
Andy
Here is the associated error information for the grouping problem (which
wasn't horribly helpful to me, maybe it mean something to you):
WorkbookView::show_horizontal_scrollbar 4 TRUE
WorkbookView::show_vertical_scrollbar 4 TRUE
WorkbookView::show_notebook_tabs 4 TRUE WorkbookView::do_auto_completion
4 TRUE application gnumeric Sheet1 Sheet1 9 12 1.000000 r_then_d
landscape A4 Arial Arial Arial Arial Arial Arial Times Arial Arial Arial
Arial State: Ohio Created 04/13/2002 State Revenue Report by Category
01/01/2000 to 12/31/2001 2000 2001 Category Gross Tax Collected Net Tax
Collected Gross Tax Collected Net Tax Collected Alchoholic Beverage
Excise =SUM(B7:B40) =SUM(C7:C40) =SUM(D7:D40) =SUM(E7:E40)
An error occurred
The org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode
notifies that org.apache.cocoon.ProcessingException says:
Exception in ServerPagesGenerator.generate()
More precisely:
org.apache.cocoon.ProcessingException: Exception in
ServerPagesGenerator.generate(): java.lang.IndexOutOfBoundsException:
Index: 1, Size: 1
extra info
full exception chain stacktrace
Original exception : java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.RangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at
org.apache.cocoon.components.language.markup.xsp.EsqlQuery.groupLevelExists(EsqlQuery.java:243)
at
org.apache.cocoon.www.samples.poi.content.dynamic.statetax2_xsp.generate(C:\Program
Files\Apache Tomcat
4.0\work\Standalone\localhost\cocoon\cocoon-files\org/apache/cocoon/www/samples/poi/content/dynamic\statetax2_xsp.java:446)
at
org.apache.cocoon.generation.ServerPagesGenerator.generate(ServerPagesGenerator.java:263)
at
org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.processXMLPipeline(AbstractProcessingPipeline.java:520)
at
org.apache.cocoon.components.pipeline.impl.CachingProcessingPipeline.processXMLPipeline(CachingProcessingPipeline.java:200)
at
org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.process(AbstractProcessingPipeline.java:495)
at
org.apache.cocoon.components.treeprocessor.sitemap.SerializeNode.invoke(SerializeNode.java:142)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:83)
at
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.invoke(PreparableMatchNode.java:157)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:107)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:158)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:107)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:152)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:327)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:309)
at
org.apache.cocoon.components.treeprocessor.sitemap.MountNode.invoke(MountNode.java:132)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:83)
at
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.invoke(PreparableMatchNode.java:157)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:107)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:158)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:107)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:152)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:327)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:309)
at
org.apache.cocoon.components.treeprocessor.sitemap.MountNode.invoke(MountNode.java:132)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:83)
at
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.invoke(PreparableMatchNode.java:157)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:107)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:158)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:107)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:152)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:327)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:309)
at org.apache.cocoon.Cocoon.process(Cocoon.java:588)
at org.apache.cocoon.servlet.CocoonServlet.service(CocoonServlet.java:1034)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1017)
at
org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1115)
at java.lang.Thread.run(Unknown Source)
stacktrace
org.apache.cocoon.ProcessingException: Exception in
ServerPagesGenerator.generate(): java.lang.IndexOutOfBoundsException:
Index: 1, Size: 1
at
org.apache.cocoon.generation.ServerPagesGenerator.generate(ServerPagesGenerator.java:275)
at
org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.processXMLPipeline(AbstractProcessingPipeline.java:520)
at
org.apache.cocoon.components.pipeline.impl.CachingProcessingPipeline.processXMLPipeline(CachingProcessingPipeline.java:200)
at
org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.process(AbstractProcessingPipeline.java:495)
at
org.apache.cocoon.components.treeprocessor.sitemap.SerializeNode.invoke(SerializeNode.java:142)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:83)
at
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.invoke(PreparableMatchNode.java:157)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:107)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:158)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:107)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:152)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:327)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:309)
at
org.apache.cocoon.components.treeprocessor.sitemap.MountNode.invoke(MountNode.java:132)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:83)
at
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.invoke(PreparableMatchNode.java:157)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:107)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:158)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:107)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:152)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:327)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:309)
at
org.apache.cocoon.components.treeprocessor.sitemap.MountNode.invoke(MountNode.java:132)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:83)
at
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.invoke(PreparableMatchNode.java:157)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:107)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:158)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:107)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:152)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:327)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:309)
at org.apache.cocoon.Cocoon.process(Cocoon.java:588)
at org.apache.cocoon.servlet.CocoonServlet.service(CocoonServlet.java:1034)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1017)
at
org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1115)
at java.lang.Thread.run(Unknown Source)
java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.RangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at
org.apache.cocoon.components.language.markup.xsp.EsqlQuery.groupLevelExists(EsqlQuery.java:243)
at
org.apache.cocoon.www.samples.poi.content.dynamic.statetax2_xsp.generate(C:\Program
Files\Apache Tomcat
4.0\work\Standalone\localhost\cocoon\cocoon-files\org/apache/cocoon/www/samples/poi/content/dynamic\statetax2_xsp.java:446)
at
org.apache.cocoon.generation.ServerPagesGenerator.generate(ServerPagesGenerator.java:263)
at
org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.processXMLPipeline(AbstractProcessingPipeline.java:520)
at
org.apache.cocoon.components.pipeline.impl.CachingProcessingPipeline.processXMLPipeline(CachingProcessingPipeline.java:200)
at
org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.process(AbstractProcessingPipeline.java:495)
at
org.apache.cocoon.components.treeprocessor.sitemap.SerializeNode.invoke(SerializeNode.java:142)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:83)
at
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.invoke(PreparableMatchNode.java:157)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:107)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:158)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:107)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:152)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:327)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:309)
at
org.apache.cocoon.components.treeprocessor.sitemap.MountNode.invoke(MountNode.java:132)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:83)
at
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.invoke(PreparableMatchNode.java:157)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:107)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:158)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:107)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:152)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:327)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:309)
at
org.apache.cocoon.components.treeprocessor.sitemap.MountNode.invoke(MountNode.java:132)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:83)
at
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.invoke(PreparableMatchNode.java:157)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:107)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:158)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:107)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:152)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:327)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:309)
at org.apache.cocoon.Cocoon.process(Cocoon.java:588)
at org.apache.cocoon.servlet.CocoonServlet.service(CocoonServlet.java:1034)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1017)
at
org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1115)
at java.lang.Thread.run(Unknown Source)
original message java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
If you need help and this information is not enough, you are invited to
read the cocoon faq.
If you still don't find the answers you need, can send a mail to the
Cocoon users mailing list, remembering to
* specify the version of Cocoon you're using, or we suppose that you
are talking about the latest version;
* specify the taglibs and sitemap components that are pertinent;
* specify the platform-operating system-version-servlet container
version;
* send any pertinent error message;
* send pertinent log snippets;
* send pertinent sitemap snippets;
* send pertinent parts of the page that gives you problems.
For more detailed technical information, take a look at the log files in
the log directory of cocoon, which is /WEB-INF/logs by default.
Logging configuration is by default in /WEB-INF/logkit.xconf.
If you think you found a bug, please report it to Apache's Bugzilla; a
message will be sent to the developer mailing list.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]