Author: julien(a)jboss.com
Date: 2008-04-07 06:44:23 -0400 (Mon, 07 Apr 2008)
New Revision: 10511
Added:
modules/presentation/trunk/presentation/src/main/resources/org/jboss/portal/presentation/impl/state/structural/
Removed:
modules/presentation/trunk/presentation/src/main/resources/org/jboss/portal/presentation/impl/state/stuctural/
Modified:
modules/presentation/trunk/classic/src/main/artifacts/presentation-war/WEB-INF/page-structure.xml
modules/presentation/trunk/classic/src/main/java/org/jboss/portal/presentation/classic/ClassicPresentationServlet.java
modules/presentation/trunk/presentation/src/main/java/org/jboss/portal/presentation/impl/state/structural/NodeImporter.java
modules/presentation/trunk/presentation/src/main/resources/org/jboss/portal/presentation/impl/state/structural/page_structure_1_0.xsd
Log:
added schema validation in node document import
Modified:
modules/presentation/trunk/classic/src/main/artifacts/presentation-war/WEB-INF/page-structure.xml
===================================================================
---
modules/presentation/trunk/classic/src/main/artifacts/presentation-war/WEB-INF/page-structure.xml 2008-04-07
09:06:32 UTC (rev 10510)
+++
modules/presentation/trunk/classic/src/main/artifacts/presentation-war/WEB-INF/page-structure.xml 2008-04-07
10:44:23 UTC (rev 10511)
@@ -1,9 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<context-def
xmlns="urn:jboss:portal:presentation:page:1.0"
-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="urn:jboss:jboss-unit:1.0 page_structure_1_0.xsd"
- >
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<page-def name="default">
<window-def name="windowA">
<content>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Pellentesque odio nisl, faucibus id, placerat et, pulvinar at, nisi. Vivamus mollis
pharetra risus. Mauris vitae massa vel augue congue eleifend. Morbi pede pede, adipiscing
nec, scelerisque nec, ullamcorper sed, libero. Mauris iaculis lorem sit amet eros. Proin
viverra eros. Morbi sit amet libero. Donec nec turpis et nunc consectetuer auctor. Fusce
et metus. Sed commodo condimentum libero. Sed mollis tellus id justo. Nulla condimentum,
libero ultricies accumsan pellentesque, nibh pede egestas quam, vitae varius nisi arcu ac
urna. Phasellus interdum, odio vitae eleifend suscipit, nibh massa laoreet lorem, id
mollis justo nisl non nunc. Sed enim enim, rutrum a, scelerisque eget, laoreet non, ante.
Aenean molestie ipsum in nisi.</content>
Modified:
modules/presentation/trunk/classic/src/main/java/org/jboss/portal/presentation/classic/ClassicPresentationServlet.java
===================================================================
---
modules/presentation/trunk/classic/src/main/java/org/jboss/portal/presentation/classic/ClassicPresentationServlet.java 2008-04-07
09:06:32 UTC (rev 10510)
+++
modules/presentation/trunk/classic/src/main/java/org/jboss/portal/presentation/classic/ClassicPresentationServlet.java 2008-04-07
10:44:23 UTC (rev 10511)
@@ -30,9 +30,7 @@
import org.jboss.portal.presentation.impl.state.structural.ContextNode;
import org.jboss.portal.presentation.impl.state.structural.NodeImporter;
import org.jboss.portal.presentation.impl.state.structural.StructuralStateContextImpl;
-import org.jboss.portal.common.xml.XMLTools;
import org.jboss.portal.common.io.IOTools;
-import org.w3c.dom.Document;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
@@ -52,11 +50,14 @@
public void init() throws ServletException
{
- Document doc;
+ StructuralStateContextImpl structuralStateContext = new
StructuralStateContextImpl();
+
+ //
InputStream in =
getServletContext().getResourceAsStream("/WEB-INF/page-structure.xml");
try
{
- doc = XMLTools.getDocumentBuilderFactory().newDocumentBuilder().parse(in);
+ ContextNode root = structuralStateContext.getRoot();
+ new NodeImporter(root).importDocument(in);
}
catch (Exception e)
{
@@ -68,13 +69,6 @@
}
//
- StructuralStateContextImpl structuralStateContext = new
StructuralStateContextImpl();
-
- //
- ContextNode root = structuralStateContext.getRoot();
- new NodeImporter(root).importDocument(doc);
-
- //
this.server = new PresentationServerImpl(structuralStateContext);
}
Modified:
modules/presentation/trunk/presentation/src/main/java/org/jboss/portal/presentation/impl/state/structural/NodeImporter.java
===================================================================
---
modules/presentation/trunk/presentation/src/main/java/org/jboss/portal/presentation/impl/state/structural/NodeImporter.java 2008-04-07
09:06:32 UTC (rev 10510)
+++
modules/presentation/trunk/presentation/src/main/java/org/jboss/portal/presentation/impl/state/structural/NodeImporter.java 2008-04-07
10:44:23 UTC (rev 10511)
@@ -26,7 +26,20 @@
import org.w3c.dom.Element;
import static org.jboss.portal.common.xml.XMLTools.*;
+import org.jboss.portal.common.xml.XMLTools;
+import org.jboss.portal.common.io.IOTools;
+import org.xml.sax.SAXException;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.validation.Schema;
+import javax.xml.validation.SchemaFactory;
+import javax.xml.XMLConstants;
+import java.io.InputStream;
+import java.io.IOException;
+import java.net.URL;
+
/**
* @author <a href="mailto:julien@jboss-portal.org">Julien
Viet</a>
* @version $Revision: 630 $
@@ -34,6 +47,27 @@
public class NodeImporter
{
+ /** . */
+ private final static Schema schema;
+
+ /** . */
+ private static final URL schemaURL;
+
+ static
+ {
+ try
+ {
+ schemaURL = NodeImporter.class.getResource("page_structure_1_0.xsd");
+ SchemaFactory factory =
SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
+ schema = factory.newSchema(schemaURL);
+ }
+ catch (SAXException e)
+ {
+ throw new Error("Could not load the page structure 1.0 schema", e);
+ }
+
+ }
+
/** The root to import the children to. */
private final StructuralNode root;
@@ -59,6 +93,33 @@
importContextDef(document.getDocumentElement());
}
+ public void importDocument(InputStream in) throws IllegalArgumentException,
ParserConfigurationException, IOException, SAXException
+ {
+ if (in == null)
+ {
+ throw new IllegalArgumentException();
+ }
+
+ //
+ InputStream schemaStream = schemaURL.openStream();
+
+ try
+ {
+ DocumentBuilderFactory factory = XMLTools.getDocumentBuilderFactory();
+ factory.setValidating(true);
+ factory.setNamespaceAware(true);
+
factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schema...;,
"http://www.w3.org/2001/XMLSchema");
+
factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schema...;,
schemaStream);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ Document doc = builder.parse(in);
+ importDocument(doc);
+ }
+ finally
+ {
+ IOTools.safeClose(schemaStream);
+ }
+ }
+
private void importContextDef(Element contextDefElt)
{
// Children pages
Copied:
modules/presentation/trunk/presentation/src/main/resources/org/jboss/portal/presentation/impl/state/structural
(from rev 10510,
modules/presentation/trunk/presentation/src/main/resources/org/jboss/portal/presentation/impl/state/stuctural)
Modified:
modules/presentation/trunk/presentation/src/main/resources/org/jboss/portal/presentation/impl/state/structural/page_structure_1_0.xsd
===================================================================
---
modules/presentation/trunk/presentation/src/main/resources/org/jboss/portal/presentation/impl/state/stuctural/page_structure_1_0.xsd 2008-04-07
09:06:32 UTC (rev 10510)
+++
modules/presentation/trunk/presentation/src/main/resources/org/jboss/portal/presentation/impl/state/structural/page_structure_1_0.xsd 2008-04-07
10:44:23 UTC (rev 10511)
@@ -42,7 +42,9 @@
<xsd:complexContent>
<xsd:extension base="nodeDefType">
<xsd:sequence>
- <xsd:element name="page-def" type="pageDefType"
minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:choice minOccurs="0"
maxOccurs="unbounded">
+ <xsd:element name="page-def"
type="pageDefType"/>
+ </xsd:choice>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
@@ -51,10 +53,10 @@
<xsd:complexType name="pageDefType">
<xsd:complexContent>
<xsd:extension base="namedNodeDefType">
- <xsd:sequence>
- <xsd:element name="page-def" type="pageDefType"
minOccurs="0" maxOccurs="unbounded"/>
- <xsd:element name="window-def" type="windowDefType"
minOccurs="0" maxOccurs="unbounded"/>
- </xsd:sequence>
+ <xsd:choice minOccurs="0" maxOccurs="unbounded">
+ <xsd:element name="page-def"
type="pageDefType"/>
+ <xsd:element name="window-def"
type="windowDefType"/>
+ </xsd:choice>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>