Question on unneeded code

Hello,

I have a program that reads xsl from database and converts tostreamsource to use TransformerFactory.

I need to set SystemId to a path. The path does not need to exist.

if I don't set Systemid it throws a TransformerConfigurationException

The path is not needed but I still need to set.

Is there something I could do so I would not need this line of code.

Code is attached.

Thanks

String filterPath ="/xsl/Dublin.filter.bob";

//Create StreamSource from filterXsl in database

realPath = context.getRealPath(filterPath);

String filterXsl = xslParms.getFilterXsl();

StringReader filterReader =new StringReader(filterXsl);

filterSource =new StreamSource(filterReader);

//filterSource.setSystemId(realPath);

TransformerFactory transformerFactory = TransformerFactory.newInstance();

Transformer transformer1 =null;

transformer1 = transformerFactory.newTransformer(filterSource);

[1178 byte] By [jake98a] at [2007-10-3 5:14:01]
# 1
Why don't we solve your actual problem instead of your proposed guess at a solution that doesn't work? As in, what exactly is this TransformerConfigurationException complaining about?
DrClapa at 2007-7-14 23:20:29 > top of Java-index,Enterprise & Remote Computing,Enterprise Technologies...
# 2

The error I get when I don't have following line

//filterSource.setSystemId(realPath);

is

javax.xml.transform.TransformerConfigurationException: Could not compile stylesheet

at org.apache.xalan.xsltc.trax.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:753)

at org.apache.xalan.xsltc.trax.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:548)

at com.endinfosys.enccat.edit.EncObjectTransformer.transform(Unknown Source)

at com.endinfosys.webapp.view.ViewServlet.transform(Unknown Source)

at com.endinfosys.webapp.view.ViewServlet.doPost(Unknown Source)

at com.endinfosys.webapp.view.ViewServlet.doGet(Unknown Source)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)

at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:432)

at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:356)

at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1033)

at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:436)

at org.apache.struts.action.RequestProcessor.processActionForward(RequestProcessor.java:401)

at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)

at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1422)

at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:505)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)

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 filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:170)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)

at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)

at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)

at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)

at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)

at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)

at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)

at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:509)

at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)

at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)

at org.apache.ajp.tomcat4.Ajp13Processor.process(Ajp13Processor.java:466)

at org.apache.ajp.tomcat4.Ajp13Processor.run(Ajp13Processor.java:585)

at java.lang.Thread.run(Thread.java:595)

jake98a at 2007-7-14 23:20:29 > top of Java-index,Enterprise & Remote Computing,Enterprise Technologies...
# 3
And you say that if you dofilterSource.setSystemId(anythingAtAll);that the problem goes away? Then what's the problem with doing that?
DrClapa at 2007-7-14 23:20:29 > top of Java-index,Enterprise & Remote Computing,Enterprise Technologies...
# 4
This is code that will be modified again and again.The question will come up. What does this line of code do?Why is it necessary?Does Xalan have a bug? StreamSource.setSystemId is optional according to Api docs.
jake98a at 2007-7-14 23:20:29 > top of Java-index,Enterprise & Remote Computing,Enterprise Technologies...
# 5

What does it do? It helps the parser find the base URL for the XML document, if it can't find the base URL on its own. And since you're parsing from a string, there's no base URL that the parser can find on its own. If it needs one, you have to provide it one via the setSystemId() method.

> This is code that will be modified again and again.

I don't understand this.

> Does Xalan have a bug?

Probably not in this case. More likely the XML document you're trying to parse contains a relative URL referring to other documents, and because you chose to pass the document in such a way that relative URLs can't be found, it says it can't compile it.

DrClapa at 2007-7-14 23:20:29 > top of Java-index,Enterprise & Remote Computing,Enterprise Technologies...