public byte[] getBytes(RenderedImage renderedImage, String contentType) throws IOException { UnsyncByteArrayOutputStream baos = new UnsyncByteArrayOutputStream(); write(renderedImage, contentType, baos); return baos.toByteArray(); }
@Test public void testURLTemplateResourceExternalization() throws Exception { String templateId = "testId"; Class<?> clazz = getClass(); ClassLoader classLoader = clazz.getClassLoader(); String resourcePath = clazz.getName(); resourcePath = resourcePath.replace('.', '/') + ".class"; URL url = classLoader.getResource(resourcePath); URLTemplateResource urlTemplateResource = new URLTemplateResource(templateId, url); // writeExternal UnsyncByteArrayOutputStream unsyncByteArrayOutputStream = new UnsyncByteArrayOutputStream(); ObjectOutput objectOutput = new MockObjectOutput(unsyncByteArrayOutputStream); urlTemplateResource.writeExternal(objectOutput); objectOutput.close(); byte[] externalizedData = unsyncByteArrayOutputStream.toByteArray(); DataInputStream dataInputStream = new DataInputStream(new UnsyncByteArrayInputStream(externalizedData)); Assert.assertEquals(templateId, dataInputStream.readUTF()); Assert.assertEquals(url.toExternalForm(), dataInputStream.readUTF()); // readExternal URLTemplateResource newURLTemplateResource = new URLTemplateResource(); MockObjectInput mockObjectInput = new MockObjectInput(new DataInputStream(new UnsyncByteArrayInputStream(externalizedData))); newURLTemplateResource.readExternal(mockObjectInput); Assert.assertEquals(templateId, newURLTemplateResource.getTemplateId()); Field templateURLField = ReflectionUtil.getDeclaredField(URLTemplateResource.class, "_templateURL"); Assert.assertEquals(url, templateURLField.get(newURLTemplateResource)); }
@Test public void testCacheTemplateResourceExternalization() throws Exception { StringTemplateResource stringTemplateResource = new StringTemplateResource("testId", "testContent"); CacheTemplateResource cacheTemplateResource = new CacheTemplateResource(stringTemplateResource); // writeExternal UnsyncByteArrayOutputStream unsyncByteArrayOutputStream = new UnsyncByteArrayOutputStream(); ObjectOutput objectOutput = new ObjectOutputStream(unsyncByteArrayOutputStream); cacheTemplateResource.writeExternal(objectOutput); objectOutput.close(); byte[] externalizedData = unsyncByteArrayOutputStream.toByteArray(); ObjectInput objectInput = new ObjectInputStream(new UnsyncByteArrayInputStream(externalizedData)); Assert.assertEquals(cacheTemplateResource.getLastModified(), objectInput.readLong()); Assert.assertEquals(stringTemplateResource, objectInput.readObject()); // readExternal CacheTemplateResource newCacheTemplateResource = new CacheTemplateResource(); objectInput = new ObjectInputStream(new UnsyncByteArrayInputStream(externalizedData)); newCacheTemplateResource.readExternal(objectInput); Field templateResourceField = ReflectionUtil.getDeclaredField(CacheTemplateResource.class, "_templateResource"); Assert.assertEquals( stringTemplateResource, templateResourceField.get(newCacheTemplateResource)); Assert.assertEquals( cacheTemplateResource.getLastModified(), newCacheTemplateResource.getLastModified()); }
@Test public void testStringTemplateResourceExternalization() throws Exception { String templateId = "testId"; String templateContent = "testContent"; StringTemplateResource stringTemplateResource = new StringTemplateResource(templateId, templateContent); // writeExternal UnsyncByteArrayOutputStream unsyncByteArrayOutputStream = new UnsyncByteArrayOutputStream(); ObjectOutput objectOutput = new MockObjectOutput(unsyncByteArrayOutputStream); stringTemplateResource.writeExternal(objectOutput); objectOutput.close(); byte[] externalizedData = unsyncByteArrayOutputStream.toByteArray(); DataInputStream dataInputStream = new DataInputStream(new UnsyncByteArrayInputStream(externalizedData)); Assert.assertEquals(stringTemplateResource.getLastModified(), dataInputStream.readLong()); Assert.assertEquals(templateContent, dataInputStream.readUTF()); Assert.assertEquals(templateId, dataInputStream.readUTF()); // readExternal StringTemplateResource newStringTemplateResource = new StringTemplateResource(); MockObjectInput mockObjectInput = new MockObjectInput(new DataInputStream(new UnsyncByteArrayInputStream(externalizedData))); newStringTemplateResource.readExternal(mockObjectInput); Assert.assertEquals( stringTemplateResource.getLastModified(), newStringTemplateResource.getLastModified()); Assert.assertEquals(templateContent, newStringTemplateResource.getContent()); Assert.assertEquals(templateId, newStringTemplateResource.getTemplateId()); }
@Test public void testJournalTemplateResourceExternalization() throws Exception { String templateId = "testId"; final long journalTemplateId = 100; JournalTemplate journalTemplate = (JournalTemplate) ProxyUtil.newProxyInstance( getClass().getClassLoader(), new Class<?>[] {JournalTemplate.class}, new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] arguments) throws Throwable { String methodName = method.getName(); if (methodName.equals("getId")) { return journalTemplateId; } throw new UnsupportedOperationException(); } }); JournalTemplateResource journalTemplateResource = new JournalTemplateResource(templateId, journalTemplate); // writeExternal UnsyncByteArrayOutputStream unsyncByteArrayOutputStream = new UnsyncByteArrayOutputStream(); ObjectOutput objectOutput = new MockObjectOutput(unsyncByteArrayOutputStream); journalTemplateResource.writeExternal(objectOutput); objectOutput.close(); byte[] externalizedData = unsyncByteArrayOutputStream.toByteArray(); DataInputStream dataInputStream = new DataInputStream(new UnsyncByteArrayInputStream(externalizedData)); Assert.assertEquals(journalTemplateId, dataInputStream.readLong()); Assert.assertEquals(templateId, dataInputStream.readUTF()); // readExternal JournalTemplateResource newJournalTemplateResource = new JournalTemplateResource(); MockObjectInput mockObjectInput = new MockObjectInput(new DataInputStream(new UnsyncByteArrayInputStream(externalizedData))); UnsyncByteArrayOutputStream hijackedUnsyncByteArrayOutputStream = ConsoleTestUtil.hijackStdErr(); try { newJournalTemplateResource.readExternal(mockObjectInput); Assert.fail(); } catch (IOException ioe) { Assert.assertEquals( "Unable to retrieve journal template with ID " + journalTemplateId, ioe.getMessage()); } finally { ConsoleTestUtil.restoreStdErr(hijackedUnsyncByteArrayOutputStream); } Assert.assertEquals(null, newJournalTemplateResource.getTemplateId()); }