[xmlc] Re: Re: Re: Re: Re: Issues with XMLC 2.3.2
"Jacob Kjome" <[email protected]> Tue, 29 Mar 2011 09:27:24 -0500
| Newsgroups | gmane.comp.java.enhydra.xmlc |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format... ------------=_1301408849-30467-16158 Content-Type: text/plain;charset=iso-8859-1; format="flowed" Content-Transfer-Encoding: quoted-printable Correct, nothing to report to nekohtml.=A0 Note that your code should alw= ays be=20 defensive like this.=A0 Never assume parent nodes.=A0 Always look them up= . Jake On Tue, 29 Mar 2011 08:02:09 +0200 =A0Sasa Bojanic <[email protected]> wrote: > When I change the code as you suggested, the problem disappears. >=20 > I assume there is nothing to report to NEKOHTML then? >=20 > Thanks, > Sasa. >=20 > On 29-Mar-11 08:51, Jacob Kjome wrote: >> I suspect nekohtml is manipulating the table in ways you didn't expect= .=20 >> Check out >> this from the 1.9.13 release note [1]... >> >> "automatically add TBODY around TR nested directly within TABLE" >> >> You say your code is... >> >> table.removeChild(page.getElementTemplateRow()); >> >> But if nekohtml is adding a TBODY node around TR, then TR is not a chi= ld of=20 >>TABLE, >> but TBODY, which could very well explain the error you are seeing.=A0=A0= It seems=20 >>to me >> that safer code would be... >> >> page.getElementTemplateRow().getParentNode().removeChild(page.getEleme= ntTemplateRow()); >> >> >> Can you try that and let me know if the issue goes away with nekohtml=20 >>version >> 1.9.13 or later? >> >> >> [1] http://nekohtml.sourceforge.net/changes.html >> >> Jake >> >> On 3/29/2011 12:06 AM, Jacob Kjome wrote: >>> I've narrowed down the DOMException NOT_FOUND_ERR problem to nekohtml= .=A0=A0When=20 >>>I use >>> version 1.9.8, which is distributed with XMLC 2.3.1, everything works= fine,=20 >>>even >>> with XMLC 2.3.2.=A0=A0But when I use version 1.9.14, I get the error = you=20 >>>reported, >>> even with XMLC 2.3.1. >>> >>> I backtracked through the versions of nekohtml to find the latest ver= sion=20 >>>that >>> would work.=A0=A0I discovered that version 1.9.12 works fine, but 1.9= .13 fails.=20 >>> So, >>> something introduced in 1.9.13 is causing the problem.=A0=A0I'll try = to do some=20 >>>more >>> digging this week to figure out what the root cause is.=A0=A0It would= be great=20 >>> if you >>> could do the same.=A0=A0When we can pinpoint the issue, we can report= it as a=20 >>>bug in >>> the nekohtml sourceforge project [1]. >>> >>> >>> [1] http://sourceforge.net/projects/nekohtml/ >>> >>> >>> Jake >>> >>> On 3/28/2011 2:28 PM, Sasa Bojanic wrote: >>>> My mistake about the "general" problem...now I see that generated XM= LC >>>> Java classes have non-default constructor taking DocumentLoader obje= ct >>>> as an initialization parameter...sorry. >>>> >>>> I still hesitate to contact Tomcat guys since I'm not deep into our >>>> MultiClassLoader code...so I don't know if there is a bug in-there. >>>> >>>> Regarding DOM problem, yes, I tried both XERCES/XML-APIS from XMLC2.= 3-1 >>>> and XMLC2.3-2, and the result is the same. >>>> >>>> "projectManagement" application and ALL other applications from the = ZIP >>>> file: >>>> https://docs.google.com/leaf?id=3D0B9ZAe6ftekYJMGVmYjdmZDMtMjY5YS00M= DU4LWIzNWEtYzhiMjBlMzZjYTZj&sort=3Dname&layout=3Dlist&pid=3D0B9ZAe6ftekYJ= NWQ0ZDRmNjMtN2M2MS00NDIyLWJmZmUtYWE0Y2Y4MDFiMDUw&cindex=3D18 >>>> >>>> >>>> are prepared for Stand-alone Tomcat deployment... >>>> >>>> Greetings, >>>> Sasa. >>>> >>>> On 28-Mar-11 22:04, Jacob Kjome wrote: >>>>> See comments inline below... >>>>> >>>>> On Mon, 28 Mar 2011 14:35:27 +0200 >>>>>=A0=A0 Sasa Bojanic<[email protected]>=A0=A0wrote: >>>>>> Jake, first of all, thanks a lot for your effort! >>>>>> >>>>> No problem.=A0=A0I any changes I made are breaking applications, I = want to >>>>> make sure they get corrected, or at least explained, properly. >>>>> >>>>>> ...here is the followup: >>>>>> >>>>>> 1) I think there is a general problem in XMLC when implementing >>>>>> CustomDocumentLoader/CustomResourceLoader. >>>>>> Hence, the JAVA classes generated based on HTML template always us= e >>>>>> StandardDocumentLoader. >>>>> I'm not sure I understand how this is a "general problem" with >>>>> document/resource loaders.=A0=A0Keep in mind, they are resource loc= ation >>>>> generic, i.e., they are meant to make resource loading plugable, >>>>> allowing loading from contexts not possible prior to XMLC 2.3.2, su= ch >>>>> as the servlet context... or even a database.=A0=A0Loading from a c= lass >>>>> loader is merely one option, albeit a built-in default one as it ha= s >>>>> been available (along with loading from configured resource >>>>> directories) since the original XMLC 2.2 release.=A0=A0The custom o= ne I >>>>> created for you is a minimal implementation that simply overrides t= he >>>>> way URLs are obtained from the class loader in the default resource >>>>> loader implementation. >>>>> >>>>> In my view, this is clearly a class loader bug.=A0=A0If the class l= oader >>>>> can actually see the resource and provide a URL, then that URL ough= t >>>>> to be a valid one.=A0=A0That Tomcat's StandardClassLoader is return= ing an >>>>> invalid URL is absolutely a bug that should be reported to, and >>>>> corrected by, the Tomcat team.=A0=A0Supplying the thread context cl= ass >>>>> loader to the XMLCDeferredParsingFactory constructor is the obvious >>>>> workaround.=A0=A0But it is a workaround only made necessary by a cl= ass >>>>> loader bug. >>>>> >>>>> That said, I recommend using the thread context class loader >>>>> regardless of this particular class loader bug, as it provides the >>>>> added benefit of allowing XMLC libraries in the server lib to be ab= le >>>>> to see classes and resources in a child classloader (e.g, the >>>>> WebappClassLoader). >>>>> >>>>>> Don't know if this can be somehow configured to specify the custom >>>>>> one? options.xmlc? >>>>>> >>>>> I really view this as outside the scope of XMLC configuration.=A0=A0= That >>>>> configuration is focused on template configuration, not how they ar= e >>>>> loaded.=A0=A0Besides, the resource loader is used to load options.x= mlc. >>>>> It's a chicken/egg problem.=A0=A0Application code has complete cont= rol >>>>> over how the XMLCDeferredParsingFactory is instantiated, so it is >>>>> application code where this should be addressed. >>>>> >>>>> XMLCContext, if you so choose to use it, provides for various servl= et >>>>> context parameters that you can configure in web.xml to specify >>>>> various things, including document loaders.=A0=A0And it **ALWAYS** >>>>> instantiates the XMLCDeferredParsingFactory using the thread contex= t >>>>> class loader.=A0=A0See.... >>>>> >>>>> http://websvn.ow2.org/filedetails.php?repname=3Dxmlc&path=3D%2Ftrun= k%2Fxmlc%2Fexamples%2Ftomcat%2Fres%2Fwebapps%2Fxmlc%2FWEB-INF%2Fweb.xml.i= n >>>>> >>>>> >>>>> http://websvn.ow2.org/filedetails.php?repname=3Dxmlc&path=3D%2Ftrun= k%2Fxmlc%2Fexamples%2Ftomcat%2Fsrc%2Fxmlc%2Fdemo%2FPreview.java >>>>> >>>>> >>>>> >>>>> All you need to do to access it is... >>>>> >>>>> XMLCContext context =3D XMLCContext.getContext(servletObj); >>>>> ...or... >>>>> XMLCContext context =3D XMLCContext.getContext(servletContextObj); >>>>> >>>>> ...and then... >>>>> XMLCDeferredParsingFactory dpFactory =3D >>>>> context.getXMLCDeferredParsingFactory(); >>>>> >>>>> >>>>> If you use this, your applications will be more configurable and ne= ver >>>>> run into invalid URLs again. >>>>> >>>>> >>>>>> 2) Maybe it makes sense to implement the following patch to XMLC's >>>>>> ResourceLoaderImpl: >>>>>> >>>>>>=A0=A0=A0=A0=A0=A0 protected URL getPathURLFromClasspath(final Stri= ng candidatePath) { >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0URL url =3D >>>>>> Thread.currentThread().getContextClassLoader().getResource(candida= tePath); >>>>>> >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0if (url=3D=3Dnull) { >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 url =3D fFactory.getPathURLFro= mClasspath(candidatePath); >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0} >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0return url; >>>>>>=A0=A0=A0=A0=A0=A0} >>>>>> >>>>> Actually, it would be the thread context classloader that might be >>>>> null, in the case that the code is not running under a JEE server t= hat >>>>> sets it.=A0=A0That said, it's an option to consider, e.g.,.... >>>>> >>>>>=A0=A0=A0=A0=A0=A0protected URL getPathURLFromClasspath(final String= candidatePath) { >>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0ClassLoader loader =3D >>>>> Thread.currentThread().getContextClassLoader(); >>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0if (loader !=3D null) { >>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0return loader..getResource= (candidatePath); >>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0} >>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0return fFactory.getPathURLFromClasspat= h(candidatePath); >>>>>=A0=A0=A0=A0=A0=A0} >>>>> >>>>> But while this might transparently resolve your issue, it takes awa= y >>>>> the ability of the user to determine the class loader to use, which >>>>> they can currently specify by supplying their class loader of choic= e >>>>> to the XMLCDeferredParsingFactory constructor.=A0=A0For this reason= , I >>>>> hesitate to implement this option. >>>>> >>>>> >>>>>> 3) I found the place where we can patch Enhydra's MultiClassLoader >>>>>> (similar way as the patch provided for XMLCDeferredParsingFactory)= , >>>>>> so that it returns the "right" resource path in the case of JAR >>>>>> files, so actually from our side, there is no need for the >>>>>> modification mentioned above. >>>>> I take it your class loader wraps Tomcat's StandardClassLoader (whe= n >>>>> running under Tomcat, that is)?=A0=A0Maybe you should have it wrap = the >>>>> thread context class loader instead?=A0=A0That way, you avoid the >>>>> StandardClassLoader's buggyness.=A0=A0In any case, there's no good = reason >>>>> for any class loader to return invalid URLs.=A0=A0Again, I urge you= to >>>>> report this issue to the Tomcat developers so this issue can be >>>>> properly fixed for everyone using Tomcat's StandardClassLoader. >>>>> >>>>>> 4) When implementing either the modification on ResourceLoaderImpl= or >>>>>> changing MultiClassLoader, calculator and discRack applications ar= e >>>>>> working normally. However, the projectManagement application is >>>>>> working only "partially"...maybe it is a completely new problem >>>>>> there, or this is the similar one but somehow hidden and not so >>>>>> obvious to determine (just to mention that application works norma= lly >>>>>> under EXACTLY THE SAME conditions under XMLC2.3-1). >>>>>> The start page of projectManagement applications is generated >>>>>> smoothly, when you log in as admin/enhydra, the next page is also = OK. >>>>>> However, when you click on the link "Employee" or "Customer", the >>>>>> following exception is thrown: >>>>>> >>>>> This is a completely distinct problem.=A0=A0This is either an issue= with >>>>> the LazyDOM or, possibly with Xerces itself.=A0=A0Did you try downg= rading >>>>> to the version of xercesImpl and xml-apis that came with XMLC-2.3.1= ? >>>>> Please try that first.=A0=A0If you still get an error, let me know.= =A0=A0I >>>>> think there was a change to the lazydom for XMLC 2.3.2 (some bug >>>>> fix).=A0=A0I can't recall exactly what it was, though.=A0=A0It's po= ssible I >>>>> introduced a regression.=A0=A0Only more testing will tell. >>>>> >>>>> BTW, is the "projectManagement" application runnable under >>>>> Tomcat-Standalone or does it require Enhydra server? >>>>> >>>>>> org.w3c.dom.DOMException: NOT_FOUND_ERR: An attempt is made to >>>>>> reference a node in a context where it does not exist. >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 at >>>>>> org.apache.xerces.dom.ParentNode.internalRemoveChild(Unknown Sourc= e) >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 at org.apache.xerces.dom.ParentNode.= removeChild(Unknown Source) >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 at >>>>>> org.enhydra.xml.lazydom.LazyElementNoNS.removeChild(LazyElementNoN= S.java:338) >>>>>> >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 at >>>>>> projectmanagement.presentation.employees.Administering.handleDefau= lt(Administering.java:80) >>>>>> >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 at >>>>>> projectmanagement.presentation.BasePO.handleEvent(BasePO.java:282) >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 at projectmanagement.presentation.Ba= sePO.run(BasePO.java:156) >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 at >>>>>> com.lutris.appserver.server.httpPresentation.HttpPresentationManag= er.runPresentationObj(Unknown >>>>>> Source) >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 at >>>>>> com.lutris.appserver.server.httpPresentation.HttpPresentationManag= er.Run(Unknown >>>>>> Source) >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 at >>>>>> com.lutris.appserver.server.httpPresentation.servlet.HttpPresentat= ionServlet.serviceDirect(HttpPresentationServlet.java:697) >>>>>> >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 at >>>>>> com.lutris.appserver.server.httpPresentation.servlet.HttpPresentat= ionServlet.service(HttpPresentationServlet.java:822) >>>>>> >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 at javax.servlet.http.HttpServlet.se= rvice(HttpServlet.java:717) >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 at >>>>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(A= pplicationFilterChain.java:290) >>>>>> >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 at >>>>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(Applicati= onFilterChain.java:206) >>>>>> >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 at >>>>>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapp= erValve.java:233) >>>>>> >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 at >>>>>> org.apache.catalina.core.StandardContextValve.invoke(StandardConte= xtValve.java:191) >>>>>> >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 at >>>>>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValv= e.java:127) >>>>>> >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 at >>>>>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValv= e.java:102) >>>>>> >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 at >>>>>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngine= Valve.java:109) >>>>>> >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 at >>>>>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.= java:298) >>>>>> >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 at >>>>>> org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProce= ssor.java:861) >>>>>> >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 at >>>>>> org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler= .process(Http11AprProtocol.java:579) >>>>>> >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 at >>>>>> org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java= :1584) >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 at java.lang.Thread.run(Thread.java:= 662) >>>>>> >>>>>> >>>>>> (I just modified a little bit original sources to print the stack >>>>>> trace of the exception). >>>>>> >>>>>>=A0=A0=A0=A0=A0=A0=A0=A0 table.removeChild(page.getElementTemplateR= ow()); >>>>>> >>>>>> The strange is that such exception does not happen when accessing >>>>>> Project/Pay Rate/Worksheet links, and the code for this pages is >>>>>> similar...removal of table template row happens. >>>>>> >>>>>> Can you give me some leads here? >>>>>> >>>>> See above for answers. >>>>> >>>>>> Greetings, >>>>>> Sasa. >>>>>> >>>>> >>>>> Jake >>>>> >>>>>> On 28-Mar-11 07:11, Jacob Kjome wrote: >>>>>>> I tried out your calculator.war example and was able to replicate >>>>>>> the problem. >>>>>>> I've also tracked down the cause.=A0=A0It turns out that while XM= LC >>>>>>> 2.3.1 and 2.3.2 >>>>>>> still do essentially the same thing, there's a nuance in how sour= ce >>>>>>> file URLs are >>>>>>> created.=A0=A0In XMLC 2.3.1, the classloader used to obtain the U= RL is >>>>>>> the same one >>>>>>> that loaded the XMLC class file.=A0=A0In XMLC 2.3.2, it's the one >>>>>>> provided to the >>>>>>> XMLCDeferredParsingFactory constructor. >>>>>>> >>>>>>> Now, in the Tomcat demo application, this turns out to be the sam= e >>>>>>> classloader, as >>>>>>> XMLCContext provides >>>>>>> "Thread.currentThread().getContextClassLoader()" to the >>>>>>> XMLCDeferredParsingFactory constructor and, of course, this ends = up >>>>>>> being the >>>>>>> WebappClassLoader as it's a thread from the current application t= hat >>>>>>> is loading >>>>>>> all the classes and the server sets this as the thread context cl= ass >>>>>>> loader for us. >>>>>>> >>>>>>> As it turns out, when URLs are created from the WebappClassLoader= , >>>>>>> loader.toString(), or loader.toExternalForm(), produces a valid J= AR >>>>>>> URL, such as... >>>>>>> >>>>>>> jar:file:/E:/Java/Apache/apache-tomcat-7.0.11/webapps/calculator/= WEB-INF/lib/calculator.jar!/calculator/presentation/Calculator.html >>>>>>> >>>>>>> >>>>>>> However, in the calculator application, the classloader provided = to the >>>>>>> XMLCDeferredParsingFactory constructor is actually the parent >>>>>>> classloder of the >>>>>>> WebappClassLoader and, under Tomcat Standalone, an instance of >>>>>>> "org.apache.catalina.loader.StandardClassLoader". >>>>>>> >>>>>>> As it turns out, when URLs are created from the StandardClassLoad= er, >>>>>>> loader.toString(), or loader.toExternalForm(), produces an invali= d >>>>>>> JAR URL, such as... >>>>>>> >>>>>>> file:/E:/Java/Apache/apache-tomcat-7.0.11/webapps/calculator/WEB-= INF/lib/calculator.jarcalculator/presentation/Calculator.html >>>>>>> >>>>>>> >>>>>>> >>>>>>> This subtle change in behavior was unforeseen and you are the fir= st >>>>>>> to report it. >>>>>>>=A0=A0=A0=A0 I never encountered it in my testing because, as ment= ioned >>>>>>> previously, I always >>>>>>> use the thread context class loader.=A0=A0Personally, I think it'= s a bug >>>>>>> in Tomcat, as >>>>>>> it shouldn't matter what kind of class loader it is.=A0=A0All cla= ss >>>>>>> loaders ought to >>>>>>> be able to generate valid jar URLs.=A0=A0I encourage you to repor= t this >>>>>>> to the Tomcat >>>>>>> development team! >>>>>>> >>>>>>> At this point, there's no going back to the way XMLC 2.3.1 loaded >>>>>>> URLs because of >>>>>>> significant design changes.=A0=A0The point at which URLs are now = loaded >>>>>>> provides no >>>>>>> access to the XMLC class file and, therefore, no way to obtain th= e >>>>>>> classloader >>>>>>> that loaded the XMLC class file... that is, unless XMLC always us= es >>>>>>> the thread >>>>>>> context classloader to load resources (more on that below).=A0=A0= Anyway, >>>>>>> here are the >>>>>>> obvious fixes in my order of preference... >>>>>>> >>>>>>> 1.=A0=A0Always pass "Thread.currentThread().getContextClassLoader= ()" to the >>>>>>> XMLCDeferredParsingFactory constructor.=A0=A0This resolves all is= sues, >>>>>>> end of story. >>>>>>> >>>>>>> 2.=A0=A0If #1 is not possible/desirable, then you can implement y= our own >>>>>>> custom >>>>>>> document/resource loader, similar to what I attached to my last >>>>>>> email (see the new >>>>>>> version attached to this email); the only difference being the >>>>>>> method to override >>>>>>> now looks like... >>>>>>> >>>>>>>=A0=A0=A0=A0=A0=A0=A0=A0protected URL getPathURLFromClasspath(fina= l String >>>>>>> candidatePath) { >>>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0return >>>>>>> Thread.currentThread().getContextClassLoader().getResource(candid= atePath); >>>>>>> >>>>>>>=A0=A0=A0=A0=A0=A0=A0=A0} >>>>>>> >>>>>>> 3.=A0=A0Change XMLC's >>>>>>> XMLCDeferredParsingFactory.getPathURLFromClasspath(String) >>>>>>> method to use the thread context classloader.=A0=A0While this is = an >>>>>>> option, it's not a >>>>>>> very good one because the thread context class loader may not alw= ays >>>>>>> be the right >>>>>>> choice.=A0=A0While it generally is the right choice 99.99999% of = the >>>>>>> time in a JEE >>>>>>> environment, XMLC is not always used in a server environment.=A0=A0= And >>>>>>> there's always >>>>>>> going to be that edge case where, even in a server environment it= 's >>>>>>> not desirable. >>>>>>>=A0=A0=A0=A0 And, of course, that's where option #1 really shines.= =A0=A0You get to >>>>>>> choose which >>>>>>> classloader to use so XMLC doesn't have to guess. >>>>>>> >>>>>>> 4.=A0=A0If you can think of a better idea, let me know.=A0=A0I'm = highly >>>>>>> resistant to #3. >>>>>>> I realize the change in behavior is inconvenient (and most likely= a >>>>>>> Tomcat bug >>>>>>> anyway), but it's a simple change on the user's part and can be d= one >>>>>>> as part of >>>>>>> the upgrade from 2.3.1 to 2.3.2.=A0=A0Besides, the design changes= that >>>>>>> introduced this >>>>>>> [easily-worked-around] situation make XMLC far more flexible in >>>>>>> regard to resource >>>>>>> loading than it was before.=A0=A0I think the benefits outweigh th= e costs. >>>>>>> >>>>>>> >>>>>>> Thoughts? >>>>>>> >>>>>>> Jake >>>>>>> >>>>>>> On 3/27/2011 3:56 PM, Sasa Bojanic wrote: >>>>>>>> OK, as I said, I will try to look at our classloader. But I can >>>>>>>> confirm >>>>>>>> that the problem that occurs with XMLC 2.3-2 does NOT occur with= XMLC >>>>>>>> 2.3-1 under EXACTLY the SAME conditions. >>>>>>>> As a sample, this time I used the simplest "calculator" applicat= ion >>>>>>>> from >>>>>>>> Enhydra Demos package. This sample uses only XMLC and Enhydra >>>>>>>> Framework >>>>>>>> classes (no database where we use our product DODS, and then JOT= M and >>>>>>>> other JTA support libraries). >>>>>>>> >>>>>>>> I deployed "calculator" application under pure Tomcat 6.0-29, JD= K >>>>>>>> 1.6.0_23 x64, Win7 x64. >>>>>>>> It works normally. Then I first replaced xercesImpl, xml-apis an= d >>>>>>>> nekohtml JAR files with the newer versions from XMLC 2.3-2. It s= till >>>>>>>> worked normally. >>>>>>>> After I finally replaced xmlc.jar (2.3-1) with xmlc-all-runtime.= jar, >>>>>>>> removed gnu-regexp.jar and introduced jregex.jar, I get the 1st >>>>>>>> described problem with not being able to find the resource from = the >>>>>>>> JAR >>>>>>>> file: >>>>>>>> >>>>>>>> java.io.FileNotFoundException: >>>>>>>> d:\apache-tomcat-6.0.29\webapps\calculator\WEB-INF\lib\calculato= r.jarcalculator\presentation\CalculatorHTML.xmlc >>>>>>>> >>>>>>>> (The system cannot find the path specified) >>>>>>>> >>>>>>>> You can download a set of Enhydra Demo applications (version 8.4= -1) >>>>>>>> for >>>>>>>> pure Tomcat from: >>>>>>>> >>>>>>>> https://docs.google.com/leaf?id=3D0B9ZAe6ftekYJMGVmYjdmZDMtMjY5Y= S00MDU4LWIzNWEtYzhiMjBlMzZjYTZj&sort=3Dname&layout=3Dlist&pid=3D0B9ZAe6ft= ekYJNWQ0ZDRmNjMtN2M2MS00NDIyLWJmZmUtYWE0Y2Y4MDFiMDUw&cindex=3D18 >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> (If necessary, you can find the source code of Enhydra Demos (TD= A), >>>>>>>> Enhydra Framework (TAF), Enhydra DODS (TRO) at: >>>>>>>> https://docs.google.com/leaf?id=3D0B9ZAe6ftekYJNTc0OWM2NzctNzM3M= S00YmNjLTkyMTctZjg0ZWUxZWI2YWQw&;hl=3Den >>>>>>>> >>>>>>>> >>>>>>>> but to reproduce the problem, downloading the 1st link is enough= ) >>>>>>>> >>>>>>>> There are many applications based on XMLC included in the ZIP fi= le >>>>>>>> from >>>>>>>> the 1st link above, ready to be deployed on pure Tomcat. >>>>>>>> As the simplest one for testing you can take "calculator.war" I = used >>>>>>>> this time. >>>>>>>> >>>>>>>> After I provide a "patch/workaround" for this problem of finding >>>>>>>> resource in the JAR file, the problem disappears. >>>>>>>> >>>>>>>> When I moved all the JAR files except the application JAR file >>>>>>>> (calculator.jar) to the common/shared class-loader (Tomcat's lib >>>>>>>> folder), this time I do NOT have the 2nd problem I described...s= o that >>>>>>>> might be my mistake during previous tests. The 2nd problem also >>>>>>>> does NOT >>>>>>>> appear with "discRack" application either. So I assume the >>>>>>>> "patch/workaround" somehow solves all the problems. >>>>>>>> >>>>>>>> Since the ONLY difference with the deployment of this sample >>>>>>>> XMLC/Enhydra Framework/DODS applications is the version of XMLC, >>>>>>>> can you >>>>>>>> please look at that samples yourself, and confirm the issue. >>>>>>>> >>>>>>>> Greetings, >>>>>>>> Sasa. >>>>>>>> >>>>>>>> >>>>>>>> On 26-Mar-11 20:14, Jacob Kjome wrote: >>>>>>>>> The thing is, XMLC doesn't create the URL object that provides = the >>>>>>>>> path to the >>>>>>>>> resource; the classloader does.=A0=A0That goes for both XMLC 2.= 3.1 and >>>>>>>>> 2.3.2.=A0=A0I can't >>>>>>>>> explain why behavior would be different for you between the two >>>>>>>>> versions?=A0=A0Of >>>>>>>>> course, I can't replicate your findings in the first place, so = I'm at >>>>>>>>> a loss. >>>>>>>>> >>>>>>>>> One thing that is a red flag for me is the path you provided... >>>>>>>>> >>>>>>>>> "d:\apache-tomcat-6.0.29\webapps\discRack\WEB-INF\lib\*discRack= .jardiscRack*\presentation\ErrorHTML.xmlc" >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> That isn't even a valid URL.=A0=A0There's no "file:/" and all t= he >>>>>>>>> slashes are >>>>>>>>> backward.=A0=A0This looks to me like a custom classloader bug.=A0= =A0Again, >>>>>>>>> XMLC doesn't >>>>>>>>> generate the URL, the classloader does. >>>>>>>>> >>>>>>>>> When you say that "it works under 2.3.1", are you sure you test= ed >>>>>>>>> 2.3.1 with the >>>>>>>>> same version of the server you are using to test 2.3.2?=A0=A0Th= at is, >>>>>>>>> when >>>>>>>>> you tested >>>>>>>>> 2.3.1, was the server an older version than what you are using = with >>>>>>>>> 2.3.2?=A0=A0If so, >>>>>>>>> please reduce the number of extraneous variables by testing wit= h the >>>>>>>>> older server >>>>>>>>> version (the one known to work) and just switching out the 2.3.= 1 >>>>>>>>> libraries with >>>>>>>>> the 2.3.2 libraries.=A0=A0Do you get better results? >>>>>>>>> >>>>>>>>> If you can send me a minimal webapp (able to run under Tomcat >>>>>>>>> standalone) with >>>>>>>>> explicit instructions on how to replicate the problem, then I'l= l test >>>>>>>>> it myself >>>>>>>>> and let you know the results. >>>>>>>>> >>>>>>>>> BTW, here's how XMLCContext loads up the deferred parsing facto= ry... >>>>>>>>> >>>>>>>>> XMLCDeferredParsingFactory newFactory >>>>>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=3D new XMLCDeferredParsingF= actory(loader, >>>>>>>>> Thread.currentThread().getContextClassLoader(), logger); >>>>>>>>> >>>>>>>>> >>>>>>>>> First, notice that the classloader is set up as the thread cont= ext >>>>>>>>> class loader of >>>>>>>>> the application.=A0=A0This is the reason why the XMLC Tomcat de= mo >>>>>>>>> works no >>>>>>>>> matter >>>>>>>>> where the XMLC libraries are located in relation to the jar >>>>>>>>> containing >>>>>>>>> the >>>>>>>>> templates.=A0=A0When templates are in the parent classloader, t= he webapp >>>>>>>>> (child) >>>>>>>>> classloader can always see that, so they load just fine.=A0=A0A= nd when >>>>>>>>> the >>>>>>>>> templates >>>>>>>>> are in the webapp classloader while the XMLC libraries are in t= he >>>>>>>>> parent, XMLC can >>>>>>>>> see down to the child classloader because it has a reference to >>>>>>>>> the child >>>>>>>>> classloader via the thread context classloader. >>>>>>>>> >>>>>>>>> Clearly the "(MultiClassLoader) >>>>>>>>> presentationManager.getAppClassLoader()" doesn't >>>>>>>>> have a reference to the thread context classloader, otherwise y= ou >>>>>>>>> would not run >>>>>>>>> into the issues you have of not finding the templates in certai= n >>>>>>>>> situations. >>>>>>>>> >>>>>>>>> >>>>>>>>> Second, you can customize the loading of resources by using a c= ustom >>>>>>>>> DocumentLoader/ResourceLoader combo.=A0=A0See the >>>>>>>>> ValidatingDocumentLoader >>>>>>>>> example in >>>>>>>>> the Tomcat demo.... >>>>>>>>> >>>>>>>>> http://websvn.ow2.org/filedetails.php?repname=3Dxmlc&path=3D%2F= tags%2FXMLC_2_3_2%2Fxmlc%2Fexamples%2Ftomcat%2Fsrc%2Fxmlc%2Fdemo%2FValida= tingDocumentLoader.java >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> This one extends ServletDocumentLoaderImpl, but if you don't ca= re >>>>>>>>> about loading >>>>>>>>> resources from the servlet context, then you can just extend >>>>>>>>> DocumentLoaderImpl. >>>>>>>>> Attached is a sample you can use.=A0=A0Instead of using >>>>>>>>> StandardDocumentLoader.getInstance() in the following... >>>>>>>>> >>>>>>>>> xmlcFactory =3D new >>>>>>>>> XMLCDeferredParsingFactory(StandardDocumentLoader.getInstance()= , >>>>>>>>> >>>>>>>>> (MultiClassLoader)presentationManager.getAppClassLoader(), >>>>>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 new EnhydraXMLCLogger(logChannel)); >>>>>>>>> >>>>>>>>> ...use... >>>>>>>>> >>>>>>>>> xmlcFactory =3D new XMLCDeferredParsingFactory(new >>>>>>>>> CustomDocumentLoader(), >>>>>>>>> >>>>>>>>> (MultiClassLoader)presentationManager.getAppClassLoader(), >>>>>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 new EnhydraXMLCLogger(logChannel)); >>>>>>>>> >>>>>>>>> ...and if you want to be able to load resources no matter where= they >>>>>>>>> exist in the >>>>>>>>> classloader hierarchy relative to where XMLC libraries exist in= the >>>>>>>>> hierarchy use... >>>>>>>>> >>>>>>>>> xmlcFactory =3D new XMLCDeferredParsingFactory(new >>>>>>>>> CustomDocumentLoader(), >>>>>>>>> >>>>>>>>> Thread.currentThread().getContextClassLoader(), >>>>>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= new EnhydraXMLCLogger(logChannel)); >>>>>>>>> >>>>>>>>> With the custom document/resource loader, you can change the be= havior >>>>>>>>> of resource >>>>>>>>> loading without modifying the internals of XMLC at all.=A0=A0Th= is feature >>>>>>>>> is new to >>>>>>>>> XMLC-2.3.2.=A0=A0However, remember that besides the added pluga= bility >>>>>>>>> provided by >>>>>>>>> XMLC-2.3.2, ultimately, XMLC 2.3.1 and 2.3.2 don't do anything >>>>>>>>> different to load >>>>>>>>> resources from the classloader.=A0=A0They both use >>>>>>>>> classLoader.getResource("some/path/to/resoruce.html").=A0=A0If = that >>>>>>>>> provides a URL >>>>>>>>> producing an invalid path, that's a bug in the classloader, not= XMLC. >>>>>>>>> >>>>>>>>> >>>>>>>>> Jake >>>>>>>>> >>>>>>>>> On 3/25/2011 9:14 AM, Sasa Bojanic wrote: >>>>>>>>>> Hi, >>>>>>>>>> >>>>>>>>>> yes, I'm of course also using 64-bit Java. >>>>>>>>>> >>>>>>>>>> I will check about our MultiClassLoader, but the point is EVER= YTHING >>>>>>>>>> WORKS PERFECTLY with XMLC 2.3-1. We don't have a problem with >>>>>>>>>> resource >>>>>>>>>> lookup within the JAR file, and do not have a problem with sce= nario >>>>>>>>>> where XMLC is not in the application's classloader. >>>>>>>>>> >>>>>>>>>> We are trying to find the reason why we can't switch to XMLC 2= .3-2 >>>>>>>>>> seamlessly...and since everything works with XMLC2.3-1 we thin= k >>>>>>>>>> it is a >>>>>>>>>> XMLC issue? >>>>>>>>>> >>>>>>>>>> Regards, >>>>>>>>>> Sasa. >>>>>>>>>> >>>>>>>>>> On 25-Mar-11 16:03, Jacob Kjome wrote: >>>>>>>>>>> In this particular case, XMLC can certainly find the file (as >>>>>>>>>>> opposed >>>>>>>>>>> to the other case where it can't when XMLC libs are in the >>>>>>>>>>> server lib, >>>>>>>>>>> at least on your system), but the path is messed up.=A0=A0But= this is >>>>>>>>>>> really not XMLC's fault.=A0=A0The classloader's getResource()= method is >>>>>>>>>>> returning an invalid path.=A0=A0Other than tweaking it with y= our >>>>>>>>>>> workaround, there's nothing XMLC can (nor should) do about th= at >>>>>>>>>>> (though there is a way you can work around this without messi= ng >>>>>>>>>>> with >>>>>>>>>>> XMLC's core, which I will send in a separate email later >>>>>>>>>>> today).=A0=A0As I >>>>>>>>>>> mentioned, it works perfectly well on my system. >>>>>>>>>>> >>>>>>>>>>> You have, potentially, at least 3 platform differences.=A0=A0= The >>>>>>>>>>> first is >>>>>>>>>>> Win7 x64, where I've only tested on WinXP x32.=A0=A0You may a= lso be >>>>>>>>>>> using >>>>>>>>>>> 64 bit Java, though you'd have to verify that.=A0=A0And you a= re running >>>>>>>>>>> under Enhydra, with some "MultiClassLoader" classloader >>>>>>>>>>> implementation.=A0=A0Somewhere in these differences lies a bu= g that >>>>>>>>>>> is not >>>>>>>>>>> the fault of XMLC. >>>>>>>>>>> >>>>>>>>>>> I would start first with the "MultiClasLoader" and see whethe= r >>>>>>>>>>> there >>>>>>>>>>> is a bug in its getResource() method that returns URL's with >>>>>>>>>>> invalid >>>>>>>>>>> paths when resources are looked up in jar files.=A0=A0Second,= I'd >>>>>>>>>>> check if >>>>>>>>>>> there's a bug in the JDK you are using (maybe the 64 bit vers= ion >>>>>>>>>>> has a >>>>>>>>>>> bug where the 32 bit version I use does not?).=A0=A0Third, I = guess >>>>>>>>>>> could >>>>>>>>>>> be a bug in Win7, though I would think the Java platform woul= d be >>>>>>>>>>> responsible for working around that given the supposed "platf= orm >>>>>>>>>>> independence" and all. >>>>>>>>>>> >>>>>>>>>>> Expect another email describing a workaround you can use, wit= hout >>>>>>>>>>> messing with XMLC's core, a bit later when I have access to m= y >>>>>>>>>>> development machine. >>>>>>>>>>> >>>>>>>>>>> Jake >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Thu, 24 Mar 2011 22:41:23 +0100 >>>>>>>>>>>=A0=A0=A0=A0=A0=A0Sasa Bojanic<[email protected]>=A0=A0=A0=A0w= rote: >>>>>>>>>>>> Hi, >>>>>>>>>>>> >>>>>>>>>>>> from what I can see in Enhydra code, XMLCDeferredParsingFact= ory is >>>>>>>>>>>> obtained by calling its constructor: >>>>>>>>>>>> >>>>>>>>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0xmlcFactory =3D new >>>>>>>>>>>> XMLCDeferredParsingFactory(StandardDocumentLoader.getInstanc= e(), >>>>>>>>>>>> >>>>>>>>>>>> (MultiClassLoader) presentationManager.getAppClassLoader(), >>>>>>>>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 new >>>>>>>>>>>> EnhydraXMLCLogger(logChannel)); >>>>>>>>>>>> >>>>>>>>>>>> First of all let me show you an error that occurs when XMLC = is >>>>>>>>>>>> in the >>>>>>>>>>>> application classloader. The error is in the attached docume= nt... >>>>>>>>>>>> >>>>>>>>>>>> I use Tomcat 6.0.29, Java 1.6_23, Win7 x64, and all the JARs >>>>>>>>>>>> you've >>>>>>>>>>>> mentioned are in this case in the application's WEB-INF\lib >>>>>>>>>>>> folder. >>>>>>>>>>>> >>>>>>>>>>>> If you notice, the XMLC is reporting to search for: >>>>>>>>>>>> >>>>>>>>>>>> d:\apache-tomcat-6.0.29\webapps\discRack\WEB-INF\lib\*discRa= ck.jardiscRack*\presentation\ErrorHTML.xmlc >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> When I "patch" XMLC as described before, this scenario works= well. >>>>>>>>>>>> >>>>>>>>>>>> Regards, >>>>>>>>>>>> Sasa. >>>>>>>>>>>> >>>>>>>>>>>> On 21-Mar-11 00:34, Jacob Kjome wrote: >>>>>>>>>>>>> Hi Sasa, >>>>>>>>>>>>> >>>>>>>>>>>>> I finally made some time to look into the issues you report= ed. >>>>>>>>>>>>> Interestingly, I'm >>>>>>>>>>>>> not able to reproduce either issue.=A0=A0I used Tomcat-6.0.= 29 >>>>>>>>>>>>> standalone, as that's >>>>>>>>>>>>> the version you used (note that I did not try Enhydra). >>>>>>>>>>>>> >>>>>>>>>>>>> To test issue #1, I jar'ed up the classes and markup files = and >>>>>>>>>>>>> made >>>>>>>>>>>>> sure to rename >>>>>>>>>>>>> the resource dirs so files located there could not be found= . >>>>>>>>>>>>> I also >>>>>>>>>>>>> renamed the >>>>>>>>>>>>> WEB-INF/xmlc directory in the demo app to ensure templates >>>>>>>>>>>>> could not >>>>>>>>>>>>> be loaded via >>>>>>>>>>>>> the servlet context (allowed for by the custom >>>>>>>>>>>>> ValidatingDocumentLoader.ValidatingResourceLoader class use= d >>>>>>>>>>>>> in the >>>>>>>>>>>>> xmlc tomcat >>>>>>>>>>>>> demo), thus could only be loaded via the classloader.=A0=A0= I >>>>>>>>>>>>> placed the >>>>>>>>>>>>> templates jar >>>>>>>>>>>>> in WEB-INF/lib and ran tomcat.=A0=A0First I tried loading t= he >>>>>>>>>>>>> Welcome.html page >>>>>>>>>>>>> (french locale, because that's what I had selected in the t= omcat >>>>>>>>>>>>> demo), which came >>>>>>>>>>>>> up fine.=A0=A0I took a look at the log to see how the file = was >>>>>>>>>>>>> loaded... >>>>>>>>>>>>> >>>>>>>>>>>>> INFO:>>>Parsing DOM for $$XMLC_GENERATED$$.xmlc.demo.Welcom= e.html >>>>>>>>>>>>> from source URL >>>>>>>>>>>>> jar:file:/D:/dev/XMLC_FORGE_SVN/tags/XMLC_2_3_2/xmlc/exampl= es/tomcat/build/webapps/xmlc/WEB-INF/lib/xmlc-templates.jar!/demo/Welcome= _fr.html >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> ...so, clearly it is being loaded via the classloader... an= d >>>>>>>>>>>>> working >>>>>>>>>>>>> fine for me. >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> To test issue #2, I copied the following jars into >>>>>>>>>>>>> ${catalina.base}/shared... >>>>>>>>>>>>> >>>>>>>>>>>>> jregex.jar >>>>>>>>>>>>> nekohtml.jar >>>>>>>>>>>>> resolver.jar >>>>>>>>>>>>> xercesImpl.jar >>>>>>>>>>>>> xml-apis.jar >>>>>>>>>>>>> xmlc-all-runtime.jar >>>>>>>>>>>>> >>>>>>>>>>>>> Note that the Tomcat demo has a modified >>>>>>>>>>>>> ${catalina.base}/conf/catalina.properties, which places the >>>>>>>>>>>>> ${catalina.base}/shared directory, as well as contained jar= s, >>>>>>>>>>>>> in the >>>>>>>>>>>>> common >>>>>>>>>>>>> loader.=A0=A0It looks like... >>>>>>>>>>>>> >>>>>>>>>>>>> common.loader=3D${catalina.base}/shared,${catalina.base}/sh= ared/*.jar,${catalina.home}/shared,${catalina.home}/shared/*.jar,${catali= na.home}/lib,${catalina.home}/lib/*.jar >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> This would be no different than putting the jars in >>>>>>>>>>>>> ${catalina.home}/lib, but >>>>>>>>>>>>> avoids having to muck with the contents of the stock Tomcat >>>>>>>>>>>>> installation. >>>>>>>>>>>>> >>>>>>>>>>>>> Anyway, I left my jar file containing the XMLC classes and >>>>>>>>>>>>> templates in >>>>>>>>>>>>> WEB-INF/lib.=A0=A0Again I tried loading the Welcome.html pa= ge and, >>>>>>>>>>>>> again, it came up >>>>>>>>>>>>> fine.=A0=A0I looked at the log and the INFO message was the= same as >>>>>>>>>>>>> above.=A0=A0I then >>>>>>>>>>>>> moved the templates jar file to the ${catalina.base}/shared >>>>>>>>>>>>> directory and tried it >>>>>>>>>>>>> again.=A0=A0The page came up fine and the INFO message look= ed like... >>>>>>>>>>>>> >>>>>>>>>>>>> INFO:>>>Parsing DOM for $$XMLC_GENERATED$$.xmlc.demo.Welcom= e.html >>>>>>>>>>>>> from source URL >>>>>>>>>>>>> jar:file:/D:/dev/XMLC_FORGE_SVN/tags/XMLC_2_3_2/xmlc/exampl= es/tomcat/build/shared/xmlc-templates.jar!/demo/Welcome_fr.html >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> I'm not sure what to tell you?=A0=A0It all works fine for m= e.=A0=A0Note >>>>>>>>>>>>> that my >>>>>>>>>>>>> environment consists of... >>>>>>>>>>>>> >>>>>>>>>>>>> Windows XP sp3 >>>>>>>>>>>>> Java 1.6.0_24 >>>>>>>>>>>>> Tomcat-6.0.29 (standalone run from the command line) >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Note that I use XMLCContext to obtain the >>>>>>>>>>>>> XMLCDeferredParsingFactory. >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> At this point, I can only say that it works for me.=A0=A0Ma= ybe the >>>>>>>>>>>>> it's >>>>>>>>>>>>> platform >>>>>>>>>>>>> differences that are causing issues?=A0=A0What OS and versi= on of >>>>>>>>>>>>> Java do >>>>>>>>>>>>> you use? >>>>>>>>>>>>> What does the original "jar:" URL look like when you run it >>>>>>>>>>>>> (prior >>>>>>>>>>>>> to having to >>>>>>>>>>>>> muck with it to get it to work in your environment)?=A0=A0A= nd >>>>>>>>>>>>> please let >>>>>>>>>>>>> me know how >>>>>>>>>>>>> you obtain the XMLCDeferredParsingFactory. >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Jake >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On 3/7/2011 1:46 PM, Sasa Bojanic wrote: >>>>>>>>>>>>>> Well, it is not really a patch, but something that made my >>>>>>>>>>>>>> use case >>>>>>>>>>>>>> one >>>>>>>>>>>>>> working...I agree nowdays it would be reasonable to move X= MLC to >>>>>>>>>>>>>> JDK1.5 >>>>>>>>>>>>>> or even 1.6... >>>>>>>>>>>>>> >>>>>>>>>>>>>> Thanks a lot for the quick response! >>>>>>>>>>>>>> >>>>>>>>>>>>>> Sasa. >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> On 07-Mar-11 17:13, Jacob Kjome wrote: >>>>>>>>>>>>>>> I can look into using your patch for #1 (or something lik= e >>>>>>>>>>>>>>> it) for >>>>>>>>>>>>>>> the >>>>>>>>>>>>>>> next XML release.=A0=A0I think the primary issue here is = that we've >>>>>>>>>>>>>>> maintained a dependency on JDK1.3, which does not have >>>>>>>>>>>>>>> java.net.URI. >>>>>>>>>>>>>>> I've tried to maintain this minimum dependency as long as >>>>>>>>>>>>>>> Xerces >>>>>>>>>>>>>>> does >>>>>>>>>>>>>>> so.=A0=A0Plus it makes for easy testing because JDK1.3 do= esn't add >>>>>>>>>>>>>>> any of >>>>>>>>>>>>>>> its own XML libraries.=A0=A0It's easy to dictate the vers= ion >>>>>>>>>>>>>>> without >>>>>>>>>>>>>>> getting buggy JDK1.4 XML behavior.=A0=A0But I think most = of the >>>>>>>>>>>>>>> world has >>>>>>>>>>>>>>> moved on to JDK1.5+, so maybe XMLC should too at some poi= nt? >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> I'll have to test #2.=A0=A0Not sure how quickly I'll be a= ble to >>>>>>>>>>>>>>> get to >>>>>>>>>>>>>>> this, though.=A0=A0But I'll try and spend some time this = week on >>>>>>>>>>>>>>> it. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Jake >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Mon, 07 Mar 2011 13:56:15 +0100 >>>>>>>>>>>>>>>=A0=A0=A0=A0=A0=A0=A0=A0Sasa Bojanic<[email protected]>=A0= =A0=A0=A0 wrote: >>>>>>>>>>>>>>>> Hi, >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> I'm trying to upgrade our applications that use XMLC 2.3= .1 >>>>>>>>>>>>>>>> to the >>>>>>>>>>>>>>>> newest XMLC version. >>>>>>>>>>>>>>>> Our applications are deployed both under the Tomcat 6.0.= 29 >>>>>>>>>>>>>>>> application server and Enhydra application server (based= on >>>>>>>>>>>>>>>> Tomcat >>>>>>>>>>>>>>>> 6.0.29). >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> There are two issues I faced: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> 1) when deploying under the Tomcat, XMLC JAR files are p= laced >>>>>>>>>>>>>>>> together with the application JAR files into application= 's >>>>>>>>>>>>>>>> WEB-INF\lib folder (so application classloader is used t= o load >>>>>>>>>>>>>>>> them). >>>>>>>>>>>>>>>> In this case, XMLC can't load resources (*.html and *.xm= lc >>>>>>>>>>>>>>>> files) >>>>>>>>>>>>>>>> from JAR file. When resources are not in the JAR file bu= t >>>>>>>>>>>>>>>> unpacked >>>>>>>>>>>>>>>> into WEB-INF\classes folder everything works. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> After "patching" the method getPathURLFromClasspath() fr= om >>>>>>>>>>>>>>>> XMLCDeferredParsingFactory to add: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0if (srcURL !=3D= null&& >>>>>>>>>>>>>>>> srcURL.toString().indexOf(".jar")>=3D 0) { >>>>>>>>>>>>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0try { >>>>>>>>>>>>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0 String mdurl =3D srcURL.toString(); >>>>>>>>>>>>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0 srcURL =3D new URL("jar:" >>>>>>>>>>>>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0+ mdurl.su= bstring(0, >>>>>>>>>>>>>>>> mdurl.indexOf(".jar")) + ".jar!/" >>>>>>>>>>>>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0+ >>>>>>>>>>>>>>>> mdurl.substring(mdurl.indexOf(".jar") + 4)); >>>>>>>>>>>>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0} catch (Exception ex) { >>>>>>>>>>>>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 } >>>>>>>>>>>>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0} >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> after the line: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0URL srcURL =3D >>>>>>>>>>>>>>>> fDynamicClassLoader.getResource(path); >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> it works fine. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> 2) when deploying under Enhydra application server or un= der >>>>>>>>>>>>>>>> Tomcat, >>>>>>>>>>>>>>>> but instead of putting XMLC JAR files into application's >>>>>>>>>>>>>>>> WEB-INF\lib, >>>>>>>>>>>>>>>> we put it into Tomcat's lib folder, XMLC can't find >>>>>>>>>>>>>>>> resources no >>>>>>>>>>>>>>>> matter if resources are inside JAR file or unpacked, and= it >>>>>>>>>>>>>>>> can't >>>>>>>>>>>>>>>> find it even in the case I put application's JAR file in= to >>>>>>>>>>>>>>>> Tomcat's >>>>>>>>>>>>>>>> lib folder. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Is it a bug in XMLC? Can somebody help? >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Regards, >>>>>>>>>>>>>>>> Sasa. >>>>>>>>>>>>>>>> >=20 ------------=_1301408849-30467-16158 Content-Type: text/plain; charset="UTF-8"; name="message-footer.txt" Content-Disposition: inline; filename="message-footer.txt" Content-Transfer-Encoding: quoted-printable -- You receive this message as a subscriber of the [email protected] mailing list= . To unsubscribe: mailto:[email protected] For general help: mailto:[email protected]?subject=3Dhelp OW2 mailing lists service home page: http://www.ow2.org/wws ------------=_1301408849-30467-16158--