java.lang.Integer cannot be cast to java.lang.Long

Die Warnung: „java.lang.Integer cannot be cast to java.lang.Long“ tritt auf, wenn versucht wird ein Integer in einen Long zu casten. Zum Beispiel mit:

long myLongNumber = (Long) collection.getProperty("myInteger");

Wenn das der Fall ist, hilft ein Casting in den generalisierten Typ Number, von welchem über die Methode longValue ein Long-Wert erhalten werden kann:

long userId = ((Number) collection.getProperty("myInteger")).longValue();

WebSocket-Unterstützung in GlassFish aktivieren

Wer eine Java-Applikation mit dem WebSocket-Protokoll erstellen möchte, der braucht einen Anwendungsserver (engl. application server) mit WebSocket-Unterstützung. Ich bevorzuge den GlassFish Application Server in der aktuellen Version 3.1.2.2. Im GlassFish 3.1.2.2 gibt es drei Wege, um WebSockets einzuschalten.
WebSocket-Unterstützung in GlassFish aktivieren weiterlesen

DateTime mit C# serialisieren und mit Java einlesen

Wer mit dem XmlSerializer ein DateTime serialisiert, erhält etwas in der folgenden Art: 0001-01-01T00:00:00. Möchte man dieses Format mit Java benutzen und auch wieder schreiben, hilft folgender Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
// Serialized DateTime-String from C#
String dateTimeString = "0001-01-01T00:00:00";
 
// Convert serialized DateTime from C# to a Java-compatible DateTime
dateTimeString = dateTimeString.replace('T', ' ');
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(dateTimeString);
DateTime dateTime = new DateTime(date);
 
// Print C#-compatible DateTime-String
date = new Date(dateTime.getValue());
String dateTimeStringFromJava = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
dateTimeStringFromJava = dateTimeStringFromJava.replace(' ', 'T');
System.out.println(dateTimeStringFromJava); // 0001-01-01T00:00:00

Note:
The „DateTime“ class comes from com.google.gdata.data.DateTime.

java.util.ConcurrentModificationException vermeiden

Zur Ausgabe von Listen eignen sich foreach-Schleifen besonders gut. Man sollte jedoch vermeiden, innerhalb eines foreach-Blocks die Liste zu modifizieren, da die Datenstruktur der Liste während der Iteration für Veränderungen gesperrt ist. Ein Hinzufügen oder Löschen von Elemente führt somit zur java.util.ConcurrentModificationException.
java.util.ConcurrentModificationException vermeiden weiterlesen

YouTube API mit Java benutzen

Viele YouTube API-Tutorials, die ich gesehen habe, sind ziemlich abenteuerlich und umständlich. Das liegt zum Teil daran, dass sich die Authentifizierung ein wenig geändert hat aber zum Teil auch wieder daran, dass die anderen Blogger es nicht besser wussten oder Abhängigkeiten (Dependencies) nicht über Maven bezogen haben.

Die Kommunikation mit YouTube ist dank der Google Data APIs ein Kinderspiel. Alles was man braucht ist ein Developer Key (über das YouTube API Dashboard zu bekommen) und schon kann es losgehen!

Hinweis: Möchte man nur Daten vom YouTube-Service abrufen, dann kann man auch ohne Angabe des Developer Keys loslegen.
YouTube API mit Java benutzen weiterlesen

UTF-8 kodierte Java-Builds mit Maven

Um möglichst systemunabhängig zu sein, sollte man seinen Code im UTF-8 Zeichensatz speichern. Beachtet man das nicht, meldet Maven beim Buildvorgang möglicherweise folgende Warnung:

Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!

Um den UTF-8 Zeichensatz in Maven zu erzwingen, muss die Eigenschaft project.build.sourceEncoding in der Konfigurationsdatei pom.xml gesetzt werden. Wer Analyse-Tools wie Cobertura einsetzt, der sollte außerdem noch die Eigenschaft project.reporting.outputEncoding auf UTF-8 setzen, damit die Logfiles ebenfalls mit UTF-8 kodiert werden.

Beispiel

1
2
3
4
5
6
7
8
9
10
<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  ...
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  </properties>
  ...
</project>