]
Viacheslav Kabanovich commented on JBIDE-19028:
-----------------------------------------------
We have automatic tests XMLCatalogTest.testSeam22Lib(), XMLCatalogTest.testSeam23Lib()
that should fail because of this issue when plugin org.jboss.tools.seam.core is packed to
jar. However, when I run tycho tests on my computer, I find this plugin is in
target/work/plugins/ as a folder, not a jar, and uri to s.tld is resolved to the existing
file in this folder, so there is no need to create a temp file and wrong algorithm is
bypassed. It looks like tests pass on server as well, which means that s.tld is found
there in a folder. [~dgolovin], could you please check what may be the problem?
Prefix string too short prevents EL content assist with Seam taglib
-------------------------------------------------------------------
Key: JBIDE-19028
URL:
https://issues.jboss.org/browse/JBIDE-19028
Project: Tools (JBoss Tools)
Issue Type: Bug
Components: jsp/jsf/xml/html source editing, seam2
Affects Versions: 4.2.1.Final
Environment: Plugin: Seam Tools 3.6.1.Final-v20141209-0505-B79
OS: Windows 8.1 64bit
Eclipse: 4.4.1.M20140925-0400 (Luna SR1)
JVM: 1.8.0_25 (64bit, Oracle)
Reporter: Jiří Jansa
Assignee: Viacheslav Kabanovich
Fix For: 4.2.3.Final, 4.3.0.Alpha1
When Seam Tools is installed in Eclipse Luna SR1, Expression Language (EL) content assist
in Visual Page Editor stopped working (no suggestion at all, JBoss related or not). This
occurs only when
xmlns:s="http://jboss.com/products/seam/taglib" tag library is
used in a Facelet page.
Eclipse log shows following stacktrace on any such content assist attempt:
{quote}
org.jboss.tools.common.validation.JBTValidationException: Prefix string too short
at
org.jboss.tools.common.validation.AsYouTypeValidatorManager.validate(AsYouTypeValidatorManager.java:187)
at
org.jboss.tools.common.validation.AsYouTypeValidatorManager.validateString(AsYouTypeValidatorManager.java:205)
at
org.jboss.tools.common.validation.AsYouTypeValidatorManager.validateString(AsYouTypeValidatorManager.java:200)
at
org.jboss.tools.common.validation.AsYouTypeValidatorManager.validate(AsYouTypeValidatorManager.java:254)
at
org.eclipse.wst.sse.ui.internal.reconcile.validator.ReconcileStepForValidator.validate(ReconcileStepForValidator.java:381)
at
org.eclipse.wst.sse.ui.internal.reconcile.validator.ReconcileStepForValidator.reconcileModel(ReconcileStepForValidator.java:259)
at
org.eclipse.jface.text.reconciler.AbstractReconcileStep.reconcile(AbstractReconcileStep.java:95)
at
org.eclipse.wst.sse.ui.internal.reconcile.validator.ValidatorStrategy.reconcile(ValidatorStrategy.java:269)
at
org.eclipse.wst.sse.ui.internal.reconcile.DocumentRegionProcessor.process(DocumentRegionProcessor.java:321)
at
org.eclipse.wst.sse.ui.internal.reconcile.StructuredRegionProcessor.process(StructuredRegionProcessor.java:258)
at
org.eclipse.wst.sse.ui.internal.reconcile.DirtyRegionProcessor$BackgroundThread.run(DirtyRegionProcessor.java:691)
Caused by: java.lang.IllegalArgumentException: Prefix string too short
at java.io.File.createTempFile(File.java:2001)
at
org.jboss.tools.jst.web.kb.taglib.TagLibraryManager.convertUriToFile(TagLibraryManager.java:182)
at
org.jboss.tools.jst.web.kb.taglib.TagLibraryManager.getStaticTLD(TagLibraryManager.java:100)
at
org.jboss.tools.jst.web.kb.internal.StaticLibraries.getLibraries(StaticLibraries.java:44)
at org.jboss.tools.jst.web.kb.internal.KbProject.getTagLibraries(KbProject.java:135)
at
org.jboss.tools.jst.web.kb.taglib.TagLibraryManager.getLibraries(TagLibraryManager.java:57)
at
org.jboss.tools.jst.web.kb.PageContextFactory.fillXMLNamespacesForNode(PageContextFactory.java:996)
at
org.jboss.tools.jst.web.kb.PageContextFactory.fillContextForNode(PageContextFactory.java:698)
at
org.jboss.tools.jst.web.kb.PageContextFactory.fillContextForChildNodes(PageContextFactory.java:687)
at
org.jboss.tools.jst.web.kb.PageContextFactory.createPageContext(PageContextFactory.java:431)
at
org.jboss.tools.jst.web.kb.PageContextFactory.createPageContext(PageContextFactory.java:236)
at
org.jboss.tools.jst.web.kb.PageContextFactory.createPageContext(PageContextFactory.java:199)
at
org.jboss.tools.jst.web.kb.PageContextFactory.createPageContext(PageContextFactory.java:184)
at
org.jboss.tools.jst.web.kb.internal.validation.ELValidator.validate(ELValidator.java:253)
at
org.jboss.tools.common.validation.AsYouTypeValidatorManager.validate(AsYouTypeValidatorManager.java:183)
... 10 more
{quote}
Digging more deeply into the cause, Eclipse loaded a plugin specified entry for this URI
as:
{quote}
Entry element: URI
Location: taglibs\tld\s.tld in jar file
C:\DevTools\IDE\eclipse\eclipse-ee-luna-sr1-64bit\plugins\org.jboss.tools.seam.core_3.6.1.Final-v20141209-0505-B79.jar
URI:
jar:file:/C:/DevTools/IDE/eclipse/eclipse-ee-luna-sr1-64bit/plugins/org.jboss.tools.seam.core_3.6.1.Final-v20141209-0505-B79.jar!/taglibs/tld/s.tld
Key type: URI
Key:
http://jboss.com/products/seam/taglib
{quote}
Line 182 of org.jboss.tools.jst.web.kb.taglib.TagLibraryManager shows the "too
short" prefix is derived from the name of the file. Here, the culprit prefix is
"s" (derived from "s.tld"). Temporary file prefix must be at least 3
characters long (javadoc:
http://docs.oracle.com/javase/8/docs/api/java/io/File.html#createTempFile...).
I managed to work around this issue temporarily by renaming s.tld and s.taglib.xml in
org.jboss.tools.seam.core_3.6.1.Final-v20141209-0505-B79.jar to seam.tld and
seam.taglib.tld respectively. Then I changed the entry in JAR's plugin.xml accordingly
and started eclipse with "-clean" option for the changes to take effect. Now,
content assist runs expectedly.
Either renaming the plugin's TLD file or ensuring the minimum prefix length in code
should do the trick.