diff options
-rw-r--r-- | lib/xmlgraphics-commons-1.4svn.jar | bin | 522588 -> 528419 bytes | |||
-rw-r--r-- | src/java/org/apache/fop/apps/FOURIResolver.java | 12 | ||||
-rw-r--r-- | src/java/org/apache/fop/util/DataURIResolver.java | 78 | ||||
-rw-r--r-- | src/java/org/apache/fop/util/DataURLUtil.java | 67 | ||||
-rw-r--r-- | src/java/org/apache/fop/util/WriterOutputStream.java | 91 | ||||
-rw-r--r-- | test/java/org/apache/fop/UtilityCodeTestSuite.java | 2 | ||||
-rw-r--r-- | test/java/org/apache/fop/util/DataURIResolverTestCase.java | 116 |
7 files changed, 5 insertions, 361 deletions
diff --git a/lib/xmlgraphics-commons-1.4svn.jar b/lib/xmlgraphics-commons-1.4svn.jar Binary files differindex 5072d3fc7..fddd6f492 100644 --- a/lib/xmlgraphics-commons-1.4svn.jar +++ b/lib/xmlgraphics-commons-1.4svn.jar diff --git a/src/java/org/apache/fop/apps/FOURIResolver.java b/src/java/org/apache/fop/apps/FOURIResolver.java index 1f4425a95..c619d9c03 100644 --- a/src/java/org/apache/fop/apps/FOURIResolver.java +++ b/src/java/org/apache/fop/apps/FOURIResolver.java @@ -34,14 +34,12 @@ import javax.xml.transform.stream.StreamSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; - import org.apache.xmlgraphics.util.io.Base64EncodeStream; - -import org.apache.fop.util.DataURIResolver; +import org.apache.xmlgraphics.util.uri.CommonURIResolver; /** * Provides FOP specific URI resolution. This is the default URIResolver - * {@link FOUserAgent} will use unless overidden. + * {@link FOUserAgent} will use unless overridden. * * @see javax.xml.transform.URIResolver */ @@ -50,8 +48,8 @@ public class FOURIResolver implements javax.xml.transform.URIResolver { // log private Log log = LogFactory.getLog("FOP"); - /** URIResolver for RFC 2397 data URLs */ - private URIResolver dataURIResolver = new DataURIResolver(); + /** Common URIResolver */ + private URIResolver commonURIResolver = CommonURIResolver.getInstance(); /** A user settable URI Resolver */ private URIResolver uriResolver = null; @@ -152,7 +150,7 @@ public class FOURIResolver implements javax.xml.transform.URIResolver { // data URLs can be quite long so evaluate early and don't try to build a File // (can lead to problems) - source = dataURIResolver.resolve(href, base); + source = commonURIResolver.resolve(href, base); // Custom uri resolution if (source == null && uriResolver != null) { diff --git a/src/java/org/apache/fop/util/DataURIResolver.java b/src/java/org/apache/fop/util/DataURIResolver.java deleted file mode 100644 index 89db6dc9d..000000000 --- a/src/java/org/apache/fop/util/DataURIResolver.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * 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. - */ - -/* $Id$ */ - -package org.apache.fop.util; - -import java.io.ByteArrayInputStream; - -import javax.xml.transform.Source; -import javax.xml.transform.TransformerException; -import javax.xml.transform.URIResolver; -import javax.xml.transform.stream.StreamSource; - -// base64 support for "data" urls -import org.apache.xmlgraphics.util.io.Base64DecodeStream; - -/** - * Resolves data URLs (described in RFC 2397) returning its data as a StreamSource. - * - * @see javax.xml.transform.URIResolver - * @see <a href="http://www.ietf.org/rfc/rfc2397">RFC 2397</a> - */ -public class DataURIResolver implements URIResolver { - - /** - * {@inheritDoc} - */ - public Source resolve(String href, String base) throws TransformerException { - if (href.startsWith("data:")) { - return parseDataURI(href); - } else { - return null; - } - } - - /** - * Parses inline data URIs as generated by MS Word's XML export and FO - * stylesheet. - * - * @see <a href="http://www.ietf.org/rfc/rfc2397">RFC 2397</a> - */ - private Source parseDataURI(String href) { - int commaPos = href.indexOf(','); - // header is of the form data:[<mediatype>][;base64] - String header = href.substring(0, commaPos); - String data = href.substring(commaPos + 1); - if (header.endsWith(";base64")) { - byte[] bytes = data.getBytes(); - ByteArrayInputStream encodedStream = new ByteArrayInputStream(bytes); - Base64DecodeStream decodedStream = new Base64DecodeStream( - encodedStream); - return new StreamSource(decodedStream); - } else { - // Note that this is not quite the full story here. But since we are - // only interested - // in base64-encoded binary data, the next line will probably never - // be called. - //TODO Handle un-escaping of special URL chars like %20 - return new StreamSource(new java.io.StringReader(data)); - } - } - -} diff --git a/src/java/org/apache/fop/util/DataURLUtil.java b/src/java/org/apache/fop/util/DataURLUtil.java deleted file mode 100644 index d8f7f17bf..000000000 --- a/src/java/org/apache/fop/util/DataURLUtil.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * 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. - */ - -/* $Id$ */ - -package org.apache.fop.util; - -import java.io.IOException; -import java.io.InputStream; -import java.io.StringWriter; -import java.io.Writer; - -import org.apache.commons.io.IOUtils; -import org.apache.xmlgraphics.util.io.Base64EncodeStream; - -/** - * Utility classes for generating RFC 2397 data URLs. - */ -public class DataURLUtil { - - /** - * Creates a new data URL and returns it as a String. - * @param in the InputStream to read the data from - * @param mediatype the MIME type of the content, or null - * @return the newly created data URL - * @throws IOException if an I/O error occurs - */ - public static String createDataURL(InputStream in, String mediatype) throws IOException { - StringWriter writer = new StringWriter(); - writeDataURL(in, mediatype, writer); - return writer.toString(); - } - - /** - * Generates a data URL and writes it to a Writer. - * @param in the InputStream to read the data from - * @param mediatype the MIME type of the content, or null - * @param writer the Writer to write to - * @throws IOException if an I/O error occurs - */ - public static void writeDataURL(InputStream in, String mediatype, Writer writer) - throws IOException { - writer.write("data:"); - if (mediatype != null) { - writer.write(mediatype); - } - writer.write(";base64,"); - Base64EncodeStream out = new Base64EncodeStream( - new WriterOutputStream(writer, "US-ASCII")); - IOUtils.copy(in, out); - out.flush(); - } -} diff --git a/src/java/org/apache/fop/util/WriterOutputStream.java b/src/java/org/apache/fop/util/WriterOutputStream.java deleted file mode 100644 index fb6875498..000000000 --- a/src/java/org/apache/fop/util/WriterOutputStream.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * 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. - */ - -/* $Id$ */ - -package org.apache.fop.util; - -import java.io.IOException; -import java.io.OutputStream; -import java.io.Writer; - -/** - * An OutputStream wrapper for a Writer. - */ -public class WriterOutputStream extends OutputStream { - - private Writer writer; - private String encoding; - - /** - * Creates a new WriterOutputStream. - * @param writer the Writer to write to - */ - public WriterOutputStream(Writer writer) { - this(writer, null); - } - - /** - * Creates a new WriterOutputStream. - * @param writer the Writer to write to - * @param encoding the encoding to use, or null if the default encoding should be used - */ - public WriterOutputStream(Writer writer, String encoding) { - this.writer = writer; - this.encoding = encoding; - } - - /** - * {@inheritDoc} - */ - public void close() throws IOException { - writer.close(); - } - - /** - * {@inheritDoc} - */ - public void flush() throws IOException { - writer.flush(); - } - - /** - * {@inheritDoc} - */ - public void write(byte[] buf, int offset, int length) throws IOException { - if (encoding != null) { - writer.write(new String(buf, offset, length, encoding)); - } else { - writer.write(new String(buf, offset, length)); - } - } - - /** - * {@inheritDoc} - */ - public void write(byte[] buf) throws IOException { - write(buf, 0, buf.length); - } - - /** - * {@inheritDoc} - */ - public void write(int b) throws IOException { - write(new byte[] {(byte)b}); - } - -} diff --git a/test/java/org/apache/fop/UtilityCodeTestSuite.java b/test/java/org/apache/fop/UtilityCodeTestSuite.java index 6611f532e..a073c4988 100644 --- a/test/java/org/apache/fop/UtilityCodeTestSuite.java +++ b/test/java/org/apache/fop/UtilityCodeTestSuite.java @@ -26,7 +26,6 @@ import org.apache.fop.events.BasicEventTestCase; import org.apache.fop.pdf.PDFObjectTestCase; import org.apache.fop.traits.BorderPropsTestCase; import org.apache.fop.util.ColorUtilTestCase; -import org.apache.fop.util.DataURIResolverTestCase; import org.apache.fop.util.ElementListUtilsTestCase; import org.apache.fop.util.PDFNumberTestCase; import org.apache.fop.util.XMLResourceBundleTestCase; @@ -49,7 +48,6 @@ public class UtilityCodeTestSuite { suite.addTest(new TestSuite(ColorUtilTestCase.class)); suite.addTest(new TestSuite(BorderPropsTestCase.class)); suite.addTest(new TestSuite(ElementListUtilsTestCase.class)); - suite.addTest(new TestSuite(DataURIResolverTestCase.class)); suite.addTest(new TestSuite(BasicEventTestCase.class)); suite.addTest(new TestSuite(XMLResourceBundleTestCase.class)); //$JUnit-END$ diff --git a/test/java/org/apache/fop/util/DataURIResolverTestCase.java b/test/java/org/apache/fop/util/DataURIResolverTestCase.java deleted file mode 100644 index 631b8dac1..000000000 --- a/test/java/org/apache/fop/util/DataURIResolverTestCase.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * 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. - */ - -/* $Id$ */ - -package org.apache.fop.util; - -import java.io.ByteArrayInputStream; - -import javax.xml.transform.Source; -import javax.xml.transform.URIResolver; -import javax.xml.transform.stream.StreamSource; - -import org.apache.commons.io.IOUtils; - -import junit.framework.TestCase; - -/** - * Test case for the RFC 2397 data URL/URI resolver. - */ -public class DataURIResolverTestCase extends TestCase { - - private static final byte[] TESTDATA = new byte[] {0, 1, 2, 3, 4, 5}; - - /** - * Tests DataURLUtil. - * @throws Exception if an error occurs - */ - public void testRFC2397Generator() throws Exception { - String url = DataURLUtil.createDataURL(new ByteArrayInputStream(TESTDATA), null); - assertEquals("Generated data URL is wrong", "data:;base64,AAECAwQF", url); - - url = DataURLUtil.createDataURL(new ByteArrayInputStream(TESTDATA), "application/pdf"); - assertEquals("Generated data URL is wrong", "data:application/pdf;base64,AAECAwQF", url); - } - - /** - * Test the URIResolver contract if the protocol doesn't match. Resolver must return null - * in this case. - * @throws Exception if an error occurs - */ - public void testNonMatchingContract() throws Exception { - URIResolver resolver = new DataURIResolver(); - Source src; - - src = resolver.resolve("http://xmlgraphics.apache.org/fop/index.html", null); - assertNull(src); - - src = resolver.resolve("index.html", "http://xmlgraphics.apache.org/fop/"); - assertNull(src); - } - - private static boolean byteCmp(byte[] src, int srcOffset, byte[] cmp) { - for (int i = 0, c = cmp.length; i < c; i++) { - if (src[srcOffset + i] != cmp[i]) { - return false; - } - } - return true; - } - - /** - * Test the DataURIResolver with correct values. - * @throws Exception if an error occurs - */ - public void testDataURLHandling() throws Exception { - URIResolver resolver = new DataURIResolver(); - Source src; - - src = resolver.resolve("data:;base64,AAECAwQF", null); - assertNotNull(src); - StreamSource streamSource = (StreamSource)src; - byte[] data = IOUtils.toByteArray(streamSource.getInputStream()); - assertTrue("Decoded data doesn't match the test data", byteCmp(TESTDATA, 0, data)); - - src = resolver.resolve( - "data:application/octet-stream;interpreter=fop;base64,AAECAwQF", null); - assertNotNull(src); - streamSource = (StreamSource)src; - assertNotNull(streamSource.getInputStream()); - assertNull(streamSource.getReader()); - data = IOUtils.toByteArray(streamSource.getInputStream()); - assertTrue("Decoded data doesn't match the test data", byteCmp(TESTDATA, 0, data)); - - src = resolver.resolve("data:,FOP", null); - assertNotNull(src); - streamSource = (StreamSource)src; - assertNull(streamSource.getInputStream()); - assertNotNull(streamSource.getReader()); - String text = IOUtils.toString(streamSource.getReader()); - assertEquals("FOP", text); - - /* TODO Un-escaping of special URL chars like %20 hasn't been implemented, yet. - src = resolver.resolve("data:,A%20brief%20note", null); - assertNotNull(src); - streamSource = (StreamSource)src; - text = IOUtils.toString(streamSource.getReader()); - assertEquals("A brief note", text); - */ - } - -} |