Post

ClassCastException con oggetto in ClassLoader diversi

Immagine
DOMANDA: Perchè ricevo un errore di ClassCastException se dalla mia webapp recupero lo stesso oggetto creato da un'altra webapp? RISPOSTA: Di solito questo errore si verifica quando stiamo utilizzando un oggetto in due class loader diversi . Ad esempio ho una webapp A che utilizza un oggetto X del jar X.jar presente nella sua WEB-INF/lib . Decido di recuperare l'oggetto X dalla webapp B che avrà anch'essa nella sua WEB-INF/lib il jar X.jar . In questo caso è vero che l'oggetto X è lo stesso ma viene caricato sia nel class loader di A che in quello di B. Ciò comporta la generazione di un errore di ClassCastException quando si tenta di recuperare l'oggetto X da B. Per ovviare facilmente a questo errore si potrebbe decidere di inserire il jar X.jar in un class loader condiviso tra le due webapp A e B (ad esempio il class loader dell'Application Server). Una soluzione più elegante, che offre una serie di vantaggi e rispetta le tecniche d

Rappresentare le Date in Java con Apache Commons DateFormatUtils

Immagine
DOMANDA: Come posso personalizzare le date in Java? RISPOSTA: Dopo aver visto come utilizzare le date con il SimpleDateFormat , passiamo a vedere una possibile alternativa fornita da un package di Apache Commons  contenente l'oggetto DateFormatUtils . Per utilizzarlo è necessario scaricare commons-lang3-3.1.jar (versione testata in questo post). Dopo aver settato il build path del progetto ed importato il jar appena scaricato, guardiamo nell'esempio come rappresentare le date in maniera semplice e veloce: package date; import java.util.Calendar; import java.util.Date; import org.apache.commons.lang3.time.DateFormatUtils; public class DateFormatUtilsTest { public static void main(String[] args) { // utilizziamo DateFormatUtils con la data odierna String dataOdierna = DateFormatUtils.format((new java.util.Date()), "MM/dd"); System.out.println("dataOdierna = " + dataOdierna); // impostiamo la data a nostro pi

Rappresentare le Date in Java con SimpleDateFormat

Immagine
DOMANDA: Come posso rappresentare le date in Java? RISPOSTA: Java ha una molteplicità di oggetti che gestiscono le date , qualcuno con un funzionamento intuitivo, altri meno. Un tentativo di semplificare la loro gestione è fornito dalla classe SimpleDateFormat ( java.text.SimpleDateFormat ). Vediamo come funziona con il seguente esempio SimpleDateFormatTest : package date; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class SimpleDateFormatTest { public static void main(String[] args) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat(); // creo l'oggetto // primo pattern: 2009, 12, 09 sdf.applyPattern("yyyy, MM, dd"); Date data = sdf.parse("2009, 12, 9"); String dataStringa = sdf.format(data); System.out.println(dataStringa); // modifico il pattern: 2009-12-09 sdf.applyPattern("yyyy-MM-dd");

Ordinamento HashMap basato su proprietà custom

DOMANDA: Come posso ordinare un HashMap basandomi su una proprietà degli oggetti che contiene? RISPOSTA: E' possibile eseguire un ordinamento di un HashMap basato su una proprietà dei suoi oggetti attraverso l'utilizzo di due elementi: Comparator TreeMap Innanzitutto creiamo un bean per rappresentare gli elementi da ordinare in base ad una proprietà. Il bean sarà Tab e la proprietà position . Come avrete intuito, faremo l'ordinamento di una serie di tab come quelli che troviamo in quasi tutte le interfacce grafiche dei moderni siti web. La nostra lista di tab (non ordinata) sarà la seguente: Portfolio Home Contatti Chi siamo Da ordinare nel seguente modo: Home Chi siamo Portfolio Contatti Innanzitutto creiamo il bean Tab : public class Tab { private int position; public Tab(int position) { this.position=position; } public int getPosition() { return position; } public void setPosition(int position) { this.position

Java Application per ridimensionamento immagine in proporzione

DOMANDA: Come posso ridimensionare un'immagine rispettando le sue proporzioni? RISPOSTA: Di seguito una breve guida per creare una piccola Java Application che visualizza un'immagine ridimensionata rispettando le sue proporzioni.  L'applicazione inoltre salva l'immagine su disco attraverso il metodo saveImage() . Il codice utilizza il metodo getScaledDimension()  riportato su StackOverflow . import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.WindowConstants; public class ImageResizeProportionally { public static void main(String[] args) { String path_immagine = "C:\\mia_immagine.jpg"; BufferedImage srcImage; try {

Problemi sendRedirect con reverse proxy?

DOMANDA: Come posso evitare l'utilizzo di sendRedirect quando questa istruzione crea problemi in un ambiente con reverse proxy? RISPOSTA: Si può sostituire l'istruzione response.sendRedirect(url_path) impostando gli header della response HTTP . Gli header da impostare sono: Location Status Code il codice da utilizzare è il 302 - Moved Temporarily Vediamo come: import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class SomeServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY); response.setHeader("Location", "/mia_pagina.jsp"); } }

Creare PDF da un XML con Apache FOP 1.1

DOMANDA: Come si crea un PDF da un file XML? RISPOSTA: E' possibile creare un PDF a partire da un XML con Apache FOP 1.1 , ultima versione attualmente disponibile. E' indispensabile sapere che per la trasformazione è necessario un file "intermedio" .xsl utilizzato come template (modello) in cui vengono conservate le informazioni di impaginazione. Come al solito, guardiamo con degli esempi ad hoc  ogni singolo step anche se, in questo post, si da per scontata una conoscenza basilare di xml ed xsl . La seguente classe Xml2Pdf trasforma l' XML in PDF grazie alle informazioni contenute nel .xsl : package fop; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.sax.SAXResu