cxf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bimargul...@apache.org
Subject svn commit: r639410 - /incubator/cxf/trunk/benchmark/profiling/src/main/java/org/apache/cxf/profile/FastInfosetExperiment.java
Date Thu, 20 Mar 2008 19:05:34 GMT
Author: bimargulies
Date: Thu Mar 20 12:05:33 2008
New Revision: 639410

URL: http://svn.apache.org/viewvc?rev=639410&view=rev
Log:
a little benchmark for use of FastInfoset. 

Added:
    incubator/cxf/trunk/benchmark/profiling/src/main/java/org/apache/cxf/profile/FastInfosetExperiment.java
  (with props)

Added: incubator/cxf/trunk/benchmark/profiling/src/main/java/org/apache/cxf/profile/FastInfosetExperiment.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/benchmark/profiling/src/main/java/org/apache/cxf/profile/FastInfosetExperiment.java?rev=639410&view=auto
==============================================================================
--- incubator/cxf/trunk/benchmark/profiling/src/main/java/org/apache/cxf/profile/FastInfosetExperiment.java
(added)
+++ incubator/cxf/trunk/benchmark/profiling/src/main/java/org/apache/cxf/profile/FastInfosetExperiment.java
Thu Mar 20 12:05:33 2008
@@ -0,0 +1,151 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.profile;
+
+import com.ctc.wstx.sax.WstxSAXParserFactory;
+import com.sun.xml.fastinfoset.sax.SAXDocumentParser;
+import com.sun.xml.fastinfoset.sax.SAXDocumentSerializer;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMResult;
+import javax.xml.transform.sax.SAXSource;
+
+import org.w3c.dom.Document;
+
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXNotRecognizedException;
+import org.xml.sax.SAXNotSupportedException;
+import org.xml.sax.XMLReader;
+
+public class FastInfosetExperiment {
+    
+    private DocumentBuilder documentBuilder;
+    TransformerFactory transformerFactory;
+    private File fiFile;
+    
+    private FastInfosetExperiment() throws ParserConfigurationException {
+        documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+        transformerFactory = TransformerFactory.newInstance();
+        fiFile = new File("fiTest.fixml");
+    }
+    
+    private void dehydrate(InputStream input, OutputStream output) throws ParserConfigurationException,
SAXException, IOException {
+        // Create Fast Infoset SAX serializer
+        SAXDocumentSerializer saxDocumentSerializer = new SAXDocumentSerializer();
+        // Set the output stream
+        saxDocumentSerializer.setOutputStream(output);
+
+        // Instantiate JAXP SAX parser factory
+        SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
+        /* Set parser to be namespace aware
+         * Very important to do otherwise invalid FI documents will be
+         * created by the SAXDocumentSerializer
+         */
+        saxParserFactory.setNamespaceAware(true);
+        // Instantiate the JAXP SAX parser
+        SAXParser saxParser = saxParserFactory.newSAXParser();
+        // Set the lexical handler
+        saxParser.setProperty("http://xml.org/sax/properties/lexical-handler", saxDocumentSerializer);
+        // Parse the XML document and convert to a fast infoset document
+        saxParser.parse(input, saxDocumentSerializer);
+    }
+    
+    private void readWithWoodstox() throws SAXException, TransformerConfigurationException,
TransformerException, IOException {
+        InputStream is = getClass().getResourceAsStream("/META-INF/cxf/cxf.xml");
+        WstxSAXParserFactory woodstoxParserFactory;
+        woodstoxParserFactory = new WstxSAXParserFactory();
+        woodstoxParserFactory.setFeature("http://xml.org/sax/features/namespace-prefixes",

+                                         true);
+        SAXParser parser = woodstoxParserFactory.newSAXParser();
+        XMLReader reader = parser.getXMLReader();
+        SAXSource saxSource = new SAXSource(reader, new InputSource(is));
+        Document document;
+        document = documentBuilder.newDocument();
+        DOMResult domResult = new DOMResult(document);
+        transformerFactory.newTransformer().transform(saxSource, domResult);
+        is.close();
+    }
+    
+    private void readWithFI() throws TransformerConfigurationException, TransformerException,
IOException {
+        InputStream is = new FileInputStream(fiFile);
+        XMLReader saxReader = new SAXDocumentParser();
+        InputStream in = new BufferedInputStream(is);
+        SAXSource saxSource = new SAXSource(saxReader, new InputSource(in));
+        Document document;
+        document = documentBuilder.newDocument();
+        DOMResult domResult = new DOMResult(document);
+        transformerFactory.newTransformer().transform(saxSource, domResult);
+        is.close();
+    }
+    
+    private void benchmark() throws ParserConfigurationException, SAXException, IOException,
TransformerConfigurationException, TransformerException {
+        InputStream is = getClass().getResourceAsStream("/META-INF/cxf/cxf.xml");
+        OutputStream os = new FileOutputStream(fiFile);
+        dehydrate(is, os);
+        is.close();
+        os.close();
+        
+        long totalTime = 0;
+        
+        for(int x = 0; x < 100; x ++) {
+            long startTime = System.nanoTime();
+            readWithWoodstox();
+            long endTime = System.nanoTime();
+            totalTime += endTime - startTime;
+        }
+        
+        double averageNanos = totalTime / 100;
+        System.out.println("Woodstox average us: " + averageNanos / 1000);
+
+        totalTime = 0;
+        
+        for(int x = 0; x < 100; x ++) {
+            long startTime = System.nanoTime();
+            readWithFI();
+            long endTime = System.nanoTime();
+            totalTime += endTime - startTime;
+        }
+        
+        averageNanos = totalTime / 100;
+        System.out.println("FastInfoset average us: " + averageNanos / 1000);
+    }
+    
+    public static void main(String[] args) throws Exception {
+        FastInfosetExperiment that = new FastInfosetExperiment();
+        that.benchmark();
+    }
+}

Propchange: incubator/cxf/trunk/benchmark/profiling/src/main/java/org/apache/cxf/profile/FastInfosetExperiment.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/benchmark/profiling/src/main/java/org/apache/cxf/profile/FastInfosetExperiment.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date



Mime
View raw message