Author: julien(a)jboss.com
Date: 2008-04-10 19:32:30 -0400 (Thu, 10 Apr 2008)
New Revision: 10527
Modified:
modules/web/trunk/web/src/main/java/org/jboss/portal/web/endpoint/EndPointServlet.java
Log:
more robust implementation of the mapping style obtention
Modified:
modules/web/trunk/web/src/main/java/org/jboss/portal/web/endpoint/EndPointServlet.java
===================================================================
---
modules/web/trunk/web/src/main/java/org/jboss/portal/web/endpoint/EndPointServlet.java 2008-04-10
22:53:05 UTC (rev 10526)
+++
modules/web/trunk/web/src/main/java/org/jboss/portal/web/endpoint/EndPointServlet.java 2008-04-10
23:32:30 UTC (rev 10527)
@@ -22,9 +22,10 @@
******************************************************************************/
package org.jboss.portal.web.endpoint;
-import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
import org.w3c.dom.NodeList;
import org.w3c.dom.Element;
+import org.w3c.dom.Document;
import org.jboss.portal.common.xml.XMLTools;
import org.jboss.portal.common.io.IOTools;
import org.jboss.portal.common.text.FastURLDecoder;
@@ -41,8 +42,11 @@
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpression;
+import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.io.InputStream;
+import java.io.ByteArrayInputStream;
/**
* A web end point.
@@ -79,19 +83,50 @@
ServletContext servletContext = getServletContext();
// XPath expression for selecting the url pattern for this servlet instance
- String xpathExpression = "//servlet-mapping[servlet-name='" +
servletName + "']/url-pattern";
+ String exprValue = "//servlet-mapping[servlet-name='" + servletName +
"']/url-pattern";
XPath xpath = XPathFactory.newInstance().newXPath();
+ XPathExpression expr;
+ try
+ {
+ expr = xpath.compile(exprValue);
+ }
+ catch (XPathExpressionException e)
+ {
+ throw new ServletException(e);
+ }
//
log.debug("Going to look for the configuration of the end point servlet "
+ servletName);
// Obtain url pattern values in order to find out how this servlet instance is
mapped
InputStream in = servletContext.getResourceAsStream("/WEB-INF/web.xml");
+ byte[] bytes;
try
{
- NodeList nodes = (NodeList)xpath.evaluate(xpathExpression, new InputSource(in),
XPathConstants.NODESET);
+ bytes = IOTools.getBytes(in);
+ // That's the descriptor but we won't parse it as the encoding may not
be correct, it's just here for debugging purpose
+ String descriptor = new String(bytes);
+ log.debug("The a priori descriptor is " + descriptor);
+ }
+ catch (IOException e)
+ {
+ throw new ServletException("The end point servlet " + servletName +
" is not able to load the web descriptor");
+ }
+ finally
+ {
+ IOTools.safeClose(in);
+ }
+
+ //
+ try
+ {
+ Document doc =
XMLTools.getDocumentBuilderFactory().newDocumentBuilder().parse(new
ByteArrayInputStream(bytes));
+
//
+ NodeList nodes = (NodeList)expr.evaluate(doc, XPathConstants.NODESET);
+
+ //
for (int i = 0;i < nodes.getLength();i++)
{
Element urlPatternElt = (Element)nodes.item(i);
@@ -127,6 +162,18 @@
}
}
}
+ catch (IOException e)
+ {
+ throw new ServletException(e);
+ }
+ catch (SAXException e)
+ {
+ throw new ServletException(e);
+ }
+ catch (ParserConfigurationException e)
+ {
+ throw new ServletException(e);
+ }
catch (XPathExpressionException e)
{
throw new ServletException(e);
@@ -135,6 +182,12 @@
{
IOTools.safeClose(in);
}
+
+ //
+ if (mappingType == null)
+ {
+ throw new ServletException("The same end point servlet " + servletName
+ " was not able to detect its mapping");
+ }
}
protected final void service(HttpServletRequest req, HttpServletResponse resp) throws
ServletException, IOException
Show replies by date