Hi Folks,
Although I'm an experienced Java and Web
developer, I'm very new to Orion and am
trying a tactic that I've seldom seen
mentioned on this newsgroup. My search
of posts for the last few months shows one
person doing something pretty similar, but
recommendations to his note haven't solved
my problem.
Basically, I would like a JB to emit pure XML
into a JSP which wraps it in the proper code
to cause IEv5.5 to perform the XML/XSL
transformation (instead of the server). I've
been able to get this logic to work in other
web crafting environments (Tango and ASP), but
have not been able to get it to work from JSPs.
I've got a local JB (ClassInfoBean2.java)
with a method that emits a chunk of XML.
The following code is in the associated JSP.
[NOTE: The <xsl:output...> lines were the
recommendation I found in a note from
1/8/01 who's subject is "XSL on Orion
returns content type text/xml instead
of text/html". Whether these lines
are present or not has made no difference.]
This JSP code is about as simple as
it gets.
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl"
href="ClassInfo2.xsl"?>
<xsl:output method = "html"
indent = "yes"
doctype-system = "http://www.w3.org/DTD/HTML4-strict-dtd"
doctype-public = "-//W3C//DTD HTML 4.0//EN"
media-type= "text/html" />
<jsp:useBean id="ClassInfoBeanId"
scope="session"
class="school.ClassInfoBean2" />
<jsp:setProperty
name="ClassInfoBeanId" property="*" />
<root>
<jsp:getProperty
name="ClassInfoBeanId"
property="xmlData" />
</root>
The associated XSL file is too long to try
to post in this note. The content probably
isn't a part of the problem since the browser
doesn't even try to do the transformation.
When I copy the following XML into an XML file,
the browser loads the file and performs the
transformation perfectly. However the browser
refuses to perform the transformation when
the same XML is emitted from a JSP file.
Here's the XML output that the JSP emits:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl"
href="ClassInfo2.xsl"?>
<xsl:output method = "html"
indent = "yes"
doctype-system = "http://www.w3.org/DTD/HTML4-strict-dtd"
doctype-public = "-//W3C//DTD HTML 4.0//EN"
media-type= "text/html" />
<root>
<title>Class Info</title>
<stylesheet>resources.css</stylesheet>
<studentinfo>
<id>234567890</id>
</studentinfo>
<class>
<id>23</id>
<name>ThisName</name>
<descr>Relatively longggg Description</descr>
<section>ThisSection</section>
<dept>ThisDept</dept>
<maxsize>18</maxsize>
<credits>3</credits>
<startdate>1-18-2001</startdate>
<starttime>13:00</starttime>
<finishtime>15:30</finishtime>
<building>thisBuilding</building>
<room>thisRoom</room>
</class>
</root>
Now when this is sent to IEv5 (with the latest
XSLT updates installed), the XSL file should be
loaded and used to transform the XML data into
the appropriate HTML--but this is not happening
and I can't tell what's missing.
Specifically, I can't tell if the browser isn't
able to find the XSL file (thus the subject
of this note), or if the browser doesn't know
that this is really an XML page that warrants
XML/XSL processing, or if the browser thinks
there's a valid reason (ie., security) to avoid
doing the transformation. No errors are
produced, the browser simply refuses to do
the transformation.
In this setting, I have several questions.
1. Given the <?xml-stylesheet...> statement
shown above, where should I put the XSL file?
Perhaps with the JSP files? (This worked for the
CSS files in this project.) Perhaps a different
path in the href value would be appropriate?
Any suggestions?
2. Do I need to explicitly tell Orion to
handle XSL and/or CSS file types? There
wouldn't be much for Orion to do except emit
their contents 'as is' and let the downstream
device do the processing. If I don't do this
then it would seem that these files would be
(apparently) served from a different server
(http://whatever:8080/something vs
http://whatever/something). I mention this
because it occurred to me that the browser's
sandbox might be interfering with loading the
XSL file from what appears to be a different
domain that where the original page is served
from. My gut feeling is that this shouldn't
be necessary, but I don't want to leave any
stone unturned in this search.
3. There's a possibility that the browser is
confused since the URL ends in JSP but I'm
returning XML content. That is, the browser may
not realize that it is appropriate for it to
do the XSL transformation. The first two lines
should remove any of the browser's doubt about the
content type of the page, but since nothing I've
done has made a difference I don't want to rule
this out as a possible cause of confusion.
My plan is to produce a transform object
which detects the browser's capabilities and
pushes the transformation as close to the
browser as possible. In the case of IE5,
then we would emit XML with an appropriate
reference to a transformation file. In browsers
that don't handle XML but have a JRE, we would
emit a page with a reference to a compiled
transformation (produced by Sun's XSLT compiler).
If the browser has no XML nor JRE support,
then the Server will perform the transformation
and emit HTML. The ultimate goal is to maximize
the utilization of the browser's capabilities.
Anyone had any luck getting IEv5 to participate
in this tactic from a JSP page? Any suggestions
would be appreciated.
Cheers,
Jeff Chapman
Pervasive Software