From: erik Date: Mon, 21 Feb 2011 23:11:28 +0000 (+0000) Subject: Now using the dom level 3 API for parsing. Also extended the test case X-Git-Tag: BEFORE_SVN_TO_GIT~25 X-Git-Url: http://wamblee.org/gitweb/?a=commitdiff_plain;h=3e3075b3ee0184b4dff3fc2292f43cd3ac3fa761;p=utils Now using the dom level 3 API for parsing. Also extended the test case to verify namespace awareness. The readAndValidate() method must still be tested. Removed the dependencies on dom4j and jaxen entirely from the code. Turned out that conversion from Dom to Dom4j was not namespace aware. --- diff --git a/pom.xml b/pom.xml index 89bbb484..39577513 100644 --- a/pom.xml +++ b/pom.xml @@ -247,17 +247,6 @@ ${spring.version} - - dom4j - dom4j - 1.6 - - - xml-apis - xml-apis - - - net.sf.ehcache ehcache-core @@ -269,21 +258,6 @@ commons-email 1.0 - - jaxen - jaxen - 1.1-beta-9 - - - xom - xom - - - xerces - xmlParserAPIs - - - jstl jstl diff --git a/support/general/pom.xml b/support/general/pom.xml index dbe1ae02..c56ad8ac 100644 --- a/support/general/pom.xml +++ b/support/general/pom.xml @@ -31,19 +31,6 @@ true - - dom4j - dom4j - test - - - - jaxen - jaxen - true - test - - diff --git a/support/general/src/main/java/org/wamblee/xml/DomUtils.java b/support/general/src/main/java/org/wamblee/xml/DomUtils.java index 3d1c2d8f..44a9f8ee 100644 --- a/support/general/src/main/java/org/wamblee/xml/DomUtils.java +++ b/support/general/src/main/java/org/wamblee/xml/DomUtils.java @@ -39,6 +39,7 @@ import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; +import javax.xml.validation.Validator; import org.w3c.dom.Attr; import org.w3c.dom.Document; @@ -46,6 +47,11 @@ import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; +import org.w3c.dom.bootstrap.DOMImplementationRegistry; +import org.w3c.dom.ls.DOMImplementationLS; +import org.w3c.dom.ls.LSException; +import org.w3c.dom.ls.LSInput; +import org.w3c.dom.ls.LSParser; import org.xml.sax.SAXException; /** @@ -91,15 +97,24 @@ public final class DomUtils { */ public static Document read(InputStream aIs) throws XMLException { try { - DocumentBuilder builder = DocumentBuilderFactory.newInstance() - .newDocumentBuilder(); + DOMImplementationRegistry registry = DOMImplementationRegistry + .newInstance(); - return builder.parse(aIs); - } catch (SAXException e) { + DOMImplementationLS impl = (DOMImplementationLS) registry + .getDOMImplementation("LS"); + + LSParser builder = impl.createLSParser( + DOMImplementationLS.MODE_SYNCHRONOUS, null); + LSInput input = impl.createLSInput(); + input.setByteStream(aIs); + return builder.parse(input); + } catch (IllegalAccessException e) { throw new XMLException(e.getMessage(), e); - } catch (IOException e) { + } catch (InstantiationException e) { throw new XMLException(e.getMessage(), e); - } catch (ParserConfigurationException e) { + } catch (ClassNotFoundException e) { + throw new XMLException(e.getMessage(), e); + } catch (LSException e) { throw new XMLException(e.getMessage(), e); } finally { try { @@ -124,23 +139,18 @@ public final class DomUtils { public static Document readAndValidate(InputStream aIs, InputStream aSchema) throws XMLException { try { + Document doc = read(aIs); final Schema schema = SchemaFactory.newInstance( XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema( new StreamSource(aSchema)); + Validator validator = schema.newValidator(); + validator.validate(new DOMSource(doc)); - final DocumentBuilderFactory factory = DocumentBuilderFactory - .newInstance(); - factory.setValidating(true); - factory.setNamespaceAware(true); - factory.setSchema(schema); - - return factory.newDocumentBuilder().parse(aIs); + return doc; } catch (SAXException e) { throw new XMLException(e.getMessage(), e); } catch (IOException e) { throw new XMLException(e.getMessage(), e); - } catch (ParserConfigurationException e) { - throw new XMLException(e.getMessage(), e); } finally { try { aSchema.close(); diff --git a/support/general/src/test/java/org/wamblee/xml/DomUtilsTest.java b/support/general/src/test/java/org/wamblee/xml/DomUtilsTest.java index c777a869..86fe9159 100644 --- a/support/general/src/test/java/org/wamblee/xml/DomUtilsTest.java +++ b/support/general/src/test/java/org/wamblee/xml/DomUtilsTest.java @@ -19,12 +19,17 @@ import java.io.ByteArrayInputStream; import org.junit.Test; import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import static junit.framework.TestCase.*; public class DomUtilsTest { @Test public void testReadWrite() throws Exception { Document doc = DomUtils.read(getClass().getResourceAsStream("test.xml")); + Element element = doc.getDocumentElement(); + assertEquals("http://wamblee.org/test", element.getNamespaceURI()); String val = DomUtils.serialize(doc); // parse the written document Document doc2 = DomUtils.read(new ByteArrayInputStream(val.getBytes())); diff --git a/support/general/src/test/java/org/wamblee/xml/XmlUtils.java b/support/general/src/test/java/org/wamblee/xml/XmlUtils.java index 3888e6f7..fd49a8a2 100644 --- a/support/general/src/test/java/org/wamblee/xml/XmlUtils.java +++ b/support/general/src/test/java/org/wamblee/xml/XmlUtils.java @@ -16,6 +16,7 @@ package org.wamblee.xml; import java.io.Serializable; +import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; @@ -24,12 +25,13 @@ import java.util.TreeMap; import junit.framework.TestCase; -import org.dom4j.Attribute; -import org.dom4j.Document; -import org.dom4j.DocumentException; -import org.dom4j.Element; -import org.dom4j.io.DOMReader; -import org.dom4j.io.DOMWriter; +import org.w3c.dom.Attr; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.w3c.dom.Text; /** * XML test support utilities. @@ -45,20 +47,6 @@ public final class XmlUtils { // Empty } - /** - * Checks equality of two XML documents excluding comment and processing - * nodes and trimming the text of the elements. In case of problems, it - * provides an xpath-like expression describing where the problem is. - * - * @param aMsg - * @param aExpected - * @param aActual - */ - public static void assertEquals(String aMsg, - org.w3c.dom.Document aExpected, org.w3c.dom.Document aActual) { - assertEquals(aMsg, convert(aExpected), convert(aActual)); - } - /** * Checks equality of two XML documents excluding comment and processing * nodes and trimming the text of the elements. In case of problems, it @@ -70,34 +58,76 @@ public final class XmlUtils { */ public static void assertEquals(String aMsg, Document aExpected, Document aActual) { - assertEquals(aMsg + "/" + aExpected.getRootElement().getName(), - aExpected.getRootElement(), aActual.getRootElement()); + assertEquals( + aMsg + "/" + aExpected.getDocumentElement().getLocalName(), + aExpected.getDocumentElement(), aActual.getDocumentElement()); + } + + private static List convertMap(NamedNodeMap aMap, Class aType) { + List result = new ArrayList(); + for (int i = 0; i < aMap.getLength(); i++) { + result.add((T) aMap.item(i)); + } + return result; + } + + private static List getChildElements(Element aElement) { + List result = new ArrayList(); + NodeList children = aElement.getChildNodes(); + for (int i = 0; i < children.getLength(); i++) { + Node node = children.item(i); + if (node instanceof Element) { + result.add((Element) node); + } + } + return result; + } + + private static String getDirectText(Element aElement) { + String res = ""; + NodeList children = aElement.getChildNodes(); + for (int i = 0; i < children.getLength(); i++) { + Node node = children.item(i); + if (node instanceof Text) { + res += node.getTextContent() + " "; + } + } + return trim(res); + } + + private static String trim(String aText) { + return aText.trim().replaceAll("\\n", " ").replaceAll("\\s+", " "); } /** * Checks equality of two XML elements excluding comment and processing - * nodes and trimming the text of the elements. In case of problems, it + * nodes and trimming the text of the elements (including whitespace in the middle). + * In case of problems, it * provides an xpath-like expression describing where the problem is. * * @param aMsg * @param aExpected * @param aActual */ - public static void assertEquals(String aMsg, Element aExpected, + private static void assertEquals(String aMsg, Element aExpected, Element aActual) { // Name. - TestCase.assertEquals(aMsg + "/name()", aExpected.getName(), aActual - .getName()); + TestCase.assertEquals(aMsg + "/name()", aExpected.getLocalName(), + aActual.getLocalName()); + TestCase.assertEquals(aMsg + "/namespace()", + aExpected.getNamespaceURI(), aActual.getNamespaceURI()); // Text - TestCase.assertEquals(aMsg + "/text()", aExpected.getTextTrim(), - aActual.getTextTrim()); + TestCase.assertEquals(aMsg + "/text()", getDirectText(aExpected) + , getDirectText(aActual)); // Attributes - List expectedAttrs = aExpected.attributes(); + List expectedAttrs = convertMap(aExpected.getAttributes(), + Attr.class); + Collections.sort(expectedAttrs, new AttributeComparator()); - List actualAttrs = aActual.attributes(); + List actualAttrs = convertMap(aActual.getAttributes(), Attr.class); Collections.sort(actualAttrs, new AttributeComparator()); TestCase.assertEquals("count(" + aMsg + "/@*)", expectedAttrs.size(), @@ -109,8 +139,8 @@ public final class XmlUtils { } // Nested elements. - List expectedElems = aExpected.elements(); - List actualElems = aActual.elements(); + List expectedElems = getChildElements(aExpected); + List actualElems = getChildElements(aActual); TestCase.assertEquals("count(" + aMsg + "/*)", expectedElems.size(), actualElems.size()); @@ -119,7 +149,7 @@ public final class XmlUtils { Map elementIndex = new TreeMap(); for (int i = 0; i < expectedElems.size(); i++) { - String elemName = expectedElems.get(i).getName(); + String elemName = expectedElems.get(i).getLocalName(); Integer index = elementIndex.get(elemName); if (index == null) { @@ -130,7 +160,7 @@ public final class XmlUtils { elementIndex.put(elemName, index); - String msg = aMsg + "/" + expectedElems.get(i).getName() + "[" + + String msg = aMsg + "/" + expectedElems.get(i).getLocalName() + "[" + index + "]"; assertEquals(msg, expectedElems.get(i), actualElems.get(i)); @@ -145,19 +175,18 @@ public final class XmlUtils { * @param aExpected * @param aActual */ - public static void assertEquals(String aMsg, Attribute aExpected, - Attribute aActual) { - TestCase.assertEquals(aMsg + ":name", aExpected.getName(), aActual - .getName()); - TestCase.assertEquals(aMsg + ":value", aExpected.getValue(), aActual - .getValue()); + private static void assertEquals(String aMsg, Attr aExpected, Attr aActual) { + TestCase.assertEquals(aMsg + ":name", aExpected.getName(), + aActual.getName()); + TestCase.assertEquals(aMsg + ":value", aExpected.getValue(), + aActual.getValue()); } /** * Comparator which compares attributes by name. */ - private static final class AttributeComparator implements - Comparator, Serializable { + private static final class AttributeComparator implements Comparator, + Serializable { private static final long serialVersionUID = 7897287273519886301L; @@ -166,35 +195,8 @@ public final class XmlUtils { * * @see java.util.Comparator#compare(T, T) */ - public int compare(Attribute aAttribute1, Attribute aAttribute2) { + public int compare(Attr aAttribute1, Attr aAttribute2) { return aAttribute1.getName().compareTo(aAttribute2.getName()); } } - - /** - * Converts a dom4j document into a w3c DOM document. - * - * @param aDocument - * Document to convert. - * - * @return W3C DOM document. - * - */ - public static org.w3c.dom.Document convert(org.dom4j.Document aDocument) - throws DocumentException { - return new DOMWriter().write(aDocument); - } - - /** - * Converts a W3C DOM document into a dom4j document. - * - * @param aDocument - * Document to convert. - * - * @return Dom4j document. - */ - public static org.dom4j.Document convert(org.w3c.dom.Document aDocument) { - return new DOMReader().read(aDocument); - } - } diff --git a/support/general/src/test/resources/org/wamblee/xml/test.xml b/support/general/src/test/resources/org/wamblee/xml/test.xml index 3e56c45f..27d2e3c1 100644 --- a/support/general/src/test/resources/org/wamblee/xml/test.xml +++ b/support/general/src/test/resources/org/wamblee/xml/test.xml @@ -1,3 +1,3 @@ - - hallo - \ No newline at end of file + + hallo + \ No newline at end of file diff --git a/support/spring/pom.xml b/support/spring/pom.xml index 2147922a..198dee44 100644 --- a/support/spring/pom.xml +++ b/support/spring/pom.xml @@ -44,10 +44,6 @@ org.springframework spring-aop - - dom4j - dom4j - net.sf.ehcache ehcache-core @@ -57,10 +53,6 @@ wamblee-hibernate-jpa 0.7-SNAPSHOT - - jaxen - jaxen - diff --git a/wicket/components/src/main/resources/org/wamblee/wicket/behavior/wamblee-tooltip.js b/wicket/components/src/main/resources/org/wamblee/wicket/behavior/wamblee-tooltip.js index 016fa492..3bdd99d1 100644 --- a/wicket/components/src/main/resources/org/wamblee/wicket/behavior/wamblee-tooltip.js +++ b/wicket/components/src/main/resources/org/wamblee/wicket/behavior/wamblee-tooltip.js @@ -34,6 +34,9 @@ // Show the tooltip. var tooltipShow = function(event) { + timerid = setTimeout(function() { + content.fadeIn(options.fadein); + }, options.delay); var content = $("#tooltipContent").text(text).css({ position : "absolute", top : event.pageY + 5, @@ -42,21 +45,17 @@ padding : options.padding, background : options.background }); - timerid = setTimeout(function() { - content.fadeIn(options.fadein); - }, options.delay); - // console.log("start"); }; // Hide the tooltip. var tooltipHide = function(event) { - $("#tooltipContent").fadeOut(options.fadeout); if (timerid) { console.log("clear timeout"); clearTimeout(timerid); timerid = undefined; } + $("#tooltipContent").fadeOut(options.fadeout); } // Add hover listeners.