<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>IT blogging</title>
	<atom:link href="http://www.itblogging.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.itblogging.de</link>
	<description>Informatik Grundlagen, Java, Datenbank, Web, Netzwerk, Linux</description>
	<lastBuildDate>Fri, 18 May 2012 19:29:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Firefox URL autocompletion in der Adressleiste</title>
		<link>http://www.itblogging.de/good-to-know/firefox-url-autocompletion-in-der-adressleiste/</link>
		<comments>http://www.itblogging.de/good-to-know/firefox-url-autocompletion-in-der-adressleiste/#comments</comments>
		<pubDate>Sun, 06 May 2012 16:25:46 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[good to know]]></category>
		<category><![CDATA[Firefox]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1888</guid>
		<description><![CDATA[Auch wenn Firefox ein sehr guter und weit verbreiteter Browser mit vielen Features ist, dennoch finde das einige Standardeinstellungen nicht ganz nach meinem Geschmack eingestellt sind. Hierzu gehört unter anderem auch die autocompletion der bereits besuchten Websites. Ist es nicht auf Dauer nervig jedes Mal den Pfeil nach unten in der Vorschlagsbox zu drücken? Bei [...]]]></description>
			<content:encoded><![CDATA[<p>Auch wenn Firefox ein sehr guter und weit verbreiteter Browser mit vielen Features ist, dennoch finde das einige Standardeinstellungen nicht ganz nach meinem Geschmack eingestellt sind. Hierzu gehört unter anderem auch die autocompletion der bereits besuchten Websites. Ist es nicht auf Dauer nervig jedes Mal den Pfeil nach unten in der Vorschlagsbox zu drücken? Bei anderen Browsern wie beispielsweise der Safari oder Chrome ist dies bereits voreingestellt&#8230;<br />
<span id="more-1888"></span><br />
Glücklicherweise ermöglicht Firefox über die Einstellungsseite <strong><em>about:config</em></strong> dem User die Möglichkeit, seinen Browser individuell anzupassen.</p>
<p>In der Suche wird nach folgendem Einstellungsnamen gesucht:</p>
<pre class="brush: bash; title: ; notranslate">browser.urlbar.autoFill</pre>
<p><a class="lightbox" title="about:config autoFill" href="http://www.itblogging.de/wp-content/uploads/2012/05/autoFill.png"><img src="http://www.itblogging.de/wp-content/uploads/2012/05/autoFill-475x109.png" alt="" title="autoFill" width="475" height="109" class="alignnone size-medium wp-image-1891" /></a></p>
<p>Per Doppelklick auf die <strong>autoFill</strong> Einstellung wird die Benutzereinstellung aktiviert und der Wert von false auf <strong>true</strong> gesetzt.</p>
<p><a class="lightbox" title="URL autocompletion"  href="http://www.itblogging.de/wp-content/uploads/2012/05/autocompletion.png"><img src="http://www.itblogging.de/wp-content/uploads/2012/05/autocompletion.png" alt="" title="autocompletion" width="394" height="224" class="alignnone size-full wp-image-1893" /></a></p>
<p>Die autocompletion ist nun aktiviert. Irgendwie sind es doch oft die Kleinigkeiten, die das alltägliche Arbeiten erleichtern.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/good-to-know/firefox-url-autocompletion-in-der-adressleiste/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Spring JdbcInsert Beispiele</title>
		<link>http://www.itblogging.de/java/spring-jdbcinsert-beispiele/</link>
		<comments>http://www.itblogging.de/java/spring-jdbcinsert-beispiele/#comments</comments>
		<pubDate>Mon, 16 Apr 2012 07:19:05 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[jdbc]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1842</guid>
		<description><![CDATA[In dem Artikel Spring JdbcTemplate Query Beispiele wurden bereits die verschiedenen Query Möglichkeiten von Spring mit Hilfe der JdbcTemplate Klasse gezeigt. In diesem Artikel möchte ich nun die unterschiedlichen Varianten eines INSERT SQL-Statements anhand einiger Beispielen präsentieren. Die Klasse SimpleJdbcInsert dient hauptsächlich dem Zweck Informationen in die Datenbank zu pushen. Alternativ bietet die JdbcTemplate Klasse [...]]]></description>
			<content:encoded><![CDATA[<p>In dem Artikel <a href="http://www.itblogging.de/java/spring-jdbctemplate-query-beispiele/" title="Spring JdbcTemplate Query Beispiele">Spring JdbcTemplate Query Beispiele</a> wurden bereits die verschiedenen Query Möglichkeiten von Spring mit Hilfe der <em>JdbcTemplate</em> Klasse gezeigt. In diesem Artikel möchte ich nun die unterschiedlichen Varianten eines INSERT SQL-Statements anhand einiger Beispielen präsentieren.<br />
Die Klasse <em>SimpleJdbcInsert</em> dient hauptsächlich dem Zweck Informationen in die Datenbank zu pushen. Alternativ bietet die <em>JdbcTemplate</em> Klasse eine Möglichkeit INSERT SQL-Statements abzusetzen.<br />
<span id="more-1842"></span><br />
Auf die Generierung einer <em>DataSource</em> werde ich in diesem Artikel nicht näher eingehen. Weitere Informationen zu diesem Thema gibt es in dem Artikel <a href="http://www.itblogging.de/java/spring-mysql-jdbc-tutorial/" title="Spring MySQL (JDBC) Tutorial">Spring MySQL (JDBC) Tutorial</a> .</p>
<h2>SimpleJdbcInsert konfigurieren</h2>
<p>Während der Initialisierung des <em>SimpleJdbcInsert</em> Objektes werden grundlegende Informationen wie der Tabellenname, der Primärschlüssel und die verwendeten Spaltennamen gesetzt. Die Zuweisung kann über zwei verschiedene Varianten umgesetzt werden.</p>
<p><strong>Variante 1:</strong></p>
<pre class="brush: java; title: ; notranslate">
DataSource dataSource = … //
SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(dataSource);
jdbcInsert.withTableName(&quot;customer&quot;);
jdbcInsert.usingGeneratedKeyColumns(&quot;customer_id&quot;);
jdbcInsert.usingColumns(&quot;first_name&quot;, &quot;last_name&quot;, &quot;email&quot;);
</pre>
<p><strong>Variante 2:</strong></p>
<pre class="brush: java; title: ; notranslate">
DataSource dataSource = … //
SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(dataSource)
                                      	.withTableName(&quot;customer&quot;)
                                      	.usingGeneratedKeyColumns(&quot;customer_id&quot;)
                                      	.usingColumns(&quot;first_name&quot;, &quot;last_name&quot;, &quot;email&quot;);
</pre>
<h2>Map<String, Object></h2>
<pre class="brush: java; title: ; notranslate">
Map&lt;String, Object&gt; parameterSource = new HashMap&lt;String, Object&gt;();
parameterSource.put(&quot;first_name&quot;, &quot;Simon&quot;);
parameterSource.put(&quot;last_name&quot;, &quot;Michel&quot;);
parameterSource.put(&quot;email&quot;, &quot;info@itblogging.de&quot;);

int rowsEffected = simpleJdbcInsert.execute(parameterSource);
System.out.println(&quot;Anzahl betroffener Datensätze: &quot; + rowsEffected);
</pre>
<h2>MapSqlParameterSource</h2>
<pre class="brush: java; title: ; notranslate">
SqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue(&quot;first_Name&quot;, &quot;Simon&quot;);
parameters.addValue(&quot;last_Name&quot;, &quot;Michel&quot;);
parameters.addValue(&quot;email&quot;, &quot;info@itblogging.de&quot;);

Number primaryKey = jdbcInsert.executeAndReturnKey(parameters);
System.out.println(&quot;Primärschlüssel des neuen Datensatzes: &quot; + primaryKey);
</pre>
<h2>BeanPropertySqlParameterSource</h2>
<p>Hinweis: Die getter Methoden der Bean Klasse müssen gleichnamig zu den Tabellenspaltennamen sein, benötigen jedoch keine Unterstriche. Heißt die Tabellenspalte wie in unserem Beispiel <em>first_name</em>, kann die getter Methode <em>getFirstName()</em> heißen.</p>
<pre class="brush: java; title: ; notranslate">
Customer customer = … //
SqlParameterSource customer = new BeanPropertySqlParameterSource(customer);
// Alternativ: executeAndReturnKeyHolder(customer)
int rowsEffected = simpleJdbcInsert.execute(customer);

System.out.println(&quot;Anzahl betroffener Datensätze: &quot; + rowsEffected);
</pre>
<h2>Alternative JdbcTemplate</h2>
<p>Nicht nur mit Hilfe der <em>SimpleJdbcInsert</em> Klasse können Informationen in der Datenbank persistiert werden, auch das <em>JdbcTemplate</em> bietet die Möglichkeit INSERT SQL-Statements abzusetzen.</p>
<h3>Einfaches Update</h3>
<pre class="brush: java; title: ; notranslate">
DataSource dataSource = ... //
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql = &quot;INSERT INTO Customer(first_name, last_name, email) VALUES(?, ?, ?)&quot;;
String firstName = &quot;Simon&quot;;
String lastName = &quot;Michel&quot;;
String email = &quot;info@itblogging.de&quot;;
jdbcTemplate.update(sql, firstName, lastName, email);
</pre>
<h3>PreparedStatementSetter</h3>
<pre class="brush: java; title: ; notranslate">
DataSource dataSource = ... //
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

final Customer customer =  … //
PreparedStatementSetter pss = new PreparedStatementSetter()
{
  @Override
  public void setValues(PreparedStatement ps) throws SQLException
  {
    ps.setString(1, customer.getFirstName());
    ps.setString(2, customer.getLastName());
    ps.setString(3, customer.getEmail());
  }
};
String sql = &quot;INSERT INTO Customer(first_name, last_name, email) VALUES(?, ?, ?)&quot;;
int rowsEffected = jdbcTemplate.update(sql, pss);
System.out.println(&quot;Anzahl betroffener Datensätze: &quot;  + rowsEffected);
</pre>
<h3>PreparedStatementCreator</h3>
<p>Bei der Verwendung des JdbcTemplates muss der Primärschlüssel (hier: <em>customer_id</em>) als Parameter des PreparedStatements übergeben werden. Der Key wird anschließend in dem <em>KeyHolder</em> gespeichert.</p>
<pre class="brush: java; title: ; notranslate">
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(new PreparedStatementCreator()
{
  @Override
  public PreparedStatement createPreparedStatement(Connection con) throws SQLException
  {
    String sql = &quot;INSERT INTO Customer(first_name, last_name, email) VALUES(?, ?, ?)&quot;;
    // customer_id = Primärschlüssel
    PreparedStatement ps =
          con.prepareStatement(sql, new String[] {&quot;customer_id&quot;});
          ps.setString(1, &quot;Simon&quot;);
          ps.setString(2, &quot;Michel&quot;);
          ps.setString(3, &quot;info@itblogging.de&quot;);

          return ps;
  }
}, keyHolder);
System.out.println(&quot;Primärschlüssel: &quot; + keyHolder.getKey());
</pre>
<p>Das war&#8217;s. Viel Spaß.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/java/spring-jdbcinsert-beispiele/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android ICS (4.0.3) über KIES für T-Mobile Kunden erhältlich</title>
		<link>http://www.itblogging.de/news/android-ics-kies-t-mobile/</link>
		<comments>http://www.itblogging.de/news/android-ics-kies-t-mobile/#comments</comments>
		<pubDate>Tue, 10 Apr 2012 21:39:31 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[ICS]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1868</guid>
		<description><![CDATA[Als ich eben seit langer langer Zeit mein Samsung Galaxy S2 mal wieder an KIES angeschlossen hatte, erwartete mich völlig überraschend das lang ersehnte Ice Cream Sandwich Update. Wenn ich mich nicht täusche, müsste die Deutsche Telekom dann heute mit der Einspeisung von ICS begonnen haben. Denn ursprünglich wollte ich eigentlich bereits gestern das Galaxy [...]]]></description>
			<content:encoded><![CDATA[<p>Als ich eben seit langer langer Zeit mein Samsung Galaxy S2 mal wieder an KIES angeschlossen hatte, erwartete mich völlig überraschend das lang ersehnte Ice Cream Sandwich Update.<br />
Wenn ich mich nicht täusche, müsste die Deutsche Telekom dann heute mit der Einspeisung von ICS begonnen haben. Denn ursprünglich wollte ich eigentlich bereits gestern das Galaxy updaten, doch da teilte mir KIES lediglich mit das ein Update auf die Version 2.3.4 verfügbar sei. Da es mir dann doch zeitlich etwas zu spät für das Update war, entschied ich mich es heute durchzuführen.<br />
<span id="more-1868"></span><br />
Umso überraschter war ich anschließend als mein Screen doch etwas anders als gewohnt aussah. Schließlich sollte das Update von 2.3.2 auf 2.3.4 lediglich Kleinigkeiten wie Google Talk aktualisieren und ein paar BugFixes durchführen. Nachdem ich dann Neugierig in den Einstellungen nach der installierten Version schaute, musste ich feststellen das die Telekom endlich das Roll Out von ICS begonnen hat, nachdem bereits viele Vermutungen in den letzten Wochen durch das Web kursierten.</p>
<p>Und hier nun die Beweise &#8230;</p>
<h2>Android 4.0.3 Screenshot<br />
<h2>
<a class="lightbox" title="Android 4.0.3 auf dem SGS2" href="http://www.itblogging.de/wp-content/uploads/2012/04/android_403.png"><img src="http://www.itblogging.de/wp-content/uploads/2012/04/android_403-285x475.png" alt="" title="Android ICS 4.0.3" width="285" height="475" class="alignnone size-medium wp-image-1872" /></a></p>
<h2>KIES Screenshot<br />
<h2>
<a class="lightbox" title="KIES Info SGS2 Android ICS" href="http://www.itblogging.de/wp-content/uploads/2012/04/sgsII_info.png"><img src="http://www.itblogging.de/wp-content/uploads/2012/04/sgsII_info-475x116.png" alt="" title="KIES Info SGS2 Android ICS" width="475" height="116" class="alignnone size-medium wp-image-1873" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/news/android-ics-kies-t-mobile/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>JAXB Tutorial</title>
		<link>http://www.itblogging.de/java/jaxb-tutorial/</link>
		<comments>http://www.itblogging.de/java/jaxb-tutorial/#comments</comments>
		<pubDate>Mon, 09 Apr 2012 19:53:53 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1854</guid>
		<description><![CDATA[Mit Hilfe der Java Architecture for XML Binding (JAXB) API können Java Objekte bequem in XML-Dokumente gewandelt werden und umgekehrt. Über Annotations teilen hierbei die Entwickler dem Compiler mit, welcher Klasse oder welches Attribut welche Eigenschaft in dem XML-Dokument übernehmen wird. Bereits in dem Tutorial Java und XML Tutorial wurde die Bearbeitung von XML-Dokumenten auf [...]]]></description>
			<content:encoded><![CDATA[<p>Mit Hilfe der Java Architecture for XML Binding (JAXB) API können Java Objekte bequem in XML-Dokumente gewandelt werden und umgekehrt. Über Annotations teilen hierbei die Entwickler dem Compiler mit, welcher Klasse oder welches Attribut welche Eigenschaft in dem XML-Dokument übernehmen wird.<br />
Bereits in dem Tutorial <a href="http://www.itblogging.de/java/java-und-xml-tutorial/" title="Java und XML Tutorial">Java und XML Tutorial</a> wurde die Bearbeitung von XML-Dokumenten auf Basis eines Literatur Beispiels gezeigt. Dieses Beispiel werde ich nun mit Hilfe von JAXB erneut aufgreifen.<br />
<span id="more-1854"></span><br />
Mehr Informationen über das Thema XML gibt es in dem Blogbeitrag <a href="http://www.itblogging.de/grundlagen/xml-extensible-markup-language/" title="XML - Extensible Markup Language">XML &#8211; Extensible Markup Language</a>. Zusatztechnologien wie zum Beispiel <em>XPath</em>, <em>XPointer</em>, oder <em>XLink</em> behandelt der Beitrag <a href="http://www.itblogging.de/grundlagen/xml-zusatztechnologien/" title="XML Zusatztechnologien">XML Zusatztechnologien</a>. </p>
<h2>Annotations</h2>
<p>Eine kleine Übersicht der verwendeten Annoations mit ihren Funktionen.</p>
<table>
<thead>
<tr>
<td><span>Annotation</span></td>
<td><span>Funktion</span></td>
</tr>
</thead>
<tbody>
<tr>
<td>@XmlRootElement(namespace = &#8220;http://www.itblogging.de/myNameSpace&#8221;)</td>
<td>Kennzeichnet das Root Element. Die Angabe des Namensraums ist optional.</td>
</tr>
<tr>
<td>@XmlElement(name = &#8220;myName&#8221;)</td>
<td>Gibt dem XML Element einen alternativen Namen, falls gewünscht.</td>
</tr>
<tr>
<td>@XmlType(propOrder = {&#8220;title&#8221;, &#8220;isbn&#8221;})</td>
<td>Bestimmt die Reihenfolge der Ausgabe.</td>
</tr>
<tr>
<td>@XmlElementWrapper(name = &#8220;authorlist&#8221;)</td>
<td>Erzeugt einen Wrapper um eine Liste von Objekten.</td>
</tr>
<tr>
<td>@XmlSchemaType(name = &#8220;dateTime&#8221;)</td>
<td>Anhagabe des Typen.</td>
</tr>
</tbody>
</table>
<h2>Author.java</h2>
<p>Die Author Klasse ist eine ganz normale Bean Klasse. Es werden keine Annotations zur Kennzeichnung besonderer Attribute benötigt.</p>
<pre class="brush: java; title: ; notranslate">
public class Author
{
  private String firstName;
  private String lastName;

  public String getFirstName()
  {
    return firstName;
  }

  public void setFirstName(String firstName)
  {
    this.firstName = firstName;
  }

  public String getLastName()
  {
    return lastName;
  }

  public void setLastName(String lastName)
  {
    this.lastName = lastName;
  }
}
</pre>
<h2>Edition.java</h2>
<p>Hier ein Beispiel der <em>@XmlElement</em> Annotation. Normalerweise würde das XML-Tag nach der Generierung den Namen &#8220;editionNo&#8221; erhalten. Statt &#8220;editionNo&#8221; wird das Tag dank der Annotation den Namen &#8220;numberOfEdition&#8221; erhalten.</p>
<pre class="brush: java; title: ; notranslate">
import javax.xml.bind.annotation.XmlElement;

public class Edition
{
  private String publisher;
  private int editionNo;
  private int publicationYear;

  public String getPublisher()
  {
    return publisher;
  }

  public void setPublisher(String publisher)
  {
    this.publisher = publisher;
  }

  public int getEditionNo()
  {
    return editionNo;
  }

  @XmlElement(name = &quot;numberOfEdition&quot;)
  public void setEditionNo(int editionNo)
  {
    this.editionNo = editionNo;
  }

  public int getPublicationYear()
  {
    return publicationYear;
  }

  public void setPublicationYear(int publicationYear)
  {
    this.publicationYear = publicationYear;
  }
}
</pre>
<h2>Book.java</h2>
<p>Über das Attribut <em>propOrder</em> der <em>@XmlType</em> Annotation kann die Reihenfolge der Ausgabe bestimmt werden. Einige Tagnamen werden mit Hilfe der <em>@XmlElement</em> neu vergeben.<br />
Die Annotation <em>@XmlElementWrapper</em> ummantelt alle Autoren mit einem weiteren Tag, dem <em>authorlist</em> Tag.</p>
<pre class="brush: java; title: ; notranslate">
import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlType;

// Property Reihenfolge mit &quot;propOrder&quot; bestimmen
@XmlType(propOrder = {&quot;title&quot;, &quot;isbn&quot;, &quot;edition&quot;, &quot;authors&quot;})
public class Book
{
    private String title;
    private List&lt;Author&gt; authors;
    private Edition edition;
    private String isbn;

    public Book()
    {
      this.authors = new ArrayList&lt;Author&gt;();
    }

    public String getTitle()
    {
        return title;
    }

    public void setTitle(String title)
    {
        this.title = title;
    }

    public void addAuthor(Author a)
    {
        authors.add(a);
    }

    @XmlElementWrapper(name = &quot;authorlist&quot;)
    @XmlElement(name = &quot;author&quot;)
    public List&lt;Author&gt; getAuthors()
    {
        return authors;
    }

    public void setEdition(Edition edition)
    {
      this.edition = edition;
    }

    @XmlElement(name = &quot;editionInfo&quot;)
    public Edition getEdition()
    {
        return edition;
    }

    public String getIsbn()
    {
        return isbn;
    }

    public void setIsbn(String isbn)
    {
        this.isbn = isbn;
    }
}
</pre>
<h2>Literature.java</h2>
<p>Die Annotation <em>@XmlRootElement</em> kennzeichnet das Wurzelelement des XML-Dokumentes. Optional kann der Namensraum angegeben werden.</p>
<pre class="brush: java; title: ; notranslate">
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;

// Angabe des Root Elements. Optional kann der namespace -sofern er vorhanden
// ist- angegeben werden.
@XmlRootElement(namespace = &quot;http://www.itblogging.de/myNameSpace&quot;)
@XmlType(propOrder = {&quot;currentTime&quot;, &quot;bookList&quot;})
public class Literature
{
  private List&lt;Book&gt; bookList;
  private Date currentTime;
  private String version;

  public Literature()
  {
    this.bookList = new ArrayList&lt;Book&gt;();
  }

  // Der Wrapper soll &quot;booklist&quot; heißen
  @XmlElementWrapper(name = &quot;booklist&quot;)
  // und die einzelnen Elemente jeweils &quot;book&quot;
  @XmlElement(name = &quot;book&quot;)
  public List&lt;Book&gt; getBookList()
  {
    return bookList;
  }

  // explizite Typenangabe
  @XmlSchemaType(name = &quot;dateTime&quot;)
  public Date getCurrentTime()
  {
    return currentTime;
  }

  public void setCurrentTime(Date currentTime)
  {
    this.currentTime = currentTime;
  }

  // Die Version soll ein Attribut des RootElements sein
  @XmlAttribute
  public String getVersion()
  {
    return version;
  }

  public void setVersion(String version)
  {
    this.version = version;
  }
}
</pre>
<h2>XMLCreator.java</h2>
<p>Diese Klasse hilft uns ein neues XML-Dokument zu erzeugen, auszugeben, zu speichern und anschließend erneut wieder einzulesen. </p>
<pre class="brush: java; title: ; notranslate">
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Date;

import javax.xml.bind.JAXB;

public class XmlCreator
{
  public static void main(String[] args) throws IOException
  {
    Literature literature = createLiterature();

    // Konsolenausgabe
    JAXB.marshal(literature, System.out);

    // Dateiname (wird in dem Projektverzeichnis hinterlegt)
    String fileName = &quot;literatur.xml&quot;;

    // Speicherung in Datei
    Writer fileWriter = new FileWriter(fileName);
    JAXB.marshal(literature, fileWriter);
    fileWriter.close();

    // Aus Datei lesen
    Literature backToObject = JAXB.unmarshal(new File(fileName), Literature.class);

    System.out.println(&quot;\nVersion: &quot; + backToObject.getVersion());
    System.out.println(&quot;Datum: &quot; + backToObject.getCurrentTime());
    System.out.println(&quot;---&quot;);
    for(Book book : backToObject.getBookList())
    {
      System.out.println(&quot;Titel: &quot; + book.getTitle());
      System.out.println(&quot;ISBN: &quot; + book.getIsbn());
      // ....
    }
  }

  // Erzeugt das Literaturverzeichnis
  private static Literature createLiterature()
  {
    Literature literature = new Literature();
    literature.setCurrentTime(new Date());
    literature.setVersion(&quot;0.1&quot;);

    // Book
    Book book = new Book();
    book.setIsbn(&quot;3-89842-488-X&quot;);
    book.setTitle(&quot;Einstieg in XML&quot;);

    // Edition
    Edition edition = new Edition();
    edition.setEditionNo(2);
    edition.setPublicationYear(2004);
    edition.setPublisher(&quot;Galileo Computing&quot;);
    book.setEdition(edition);

    // Author
    Author author = new Author();
    author.setFirstName(&quot;Helmut&quot;);
    author.setLastName(&quot;Vonhoegen&quot;);
    book.getAuthors().add(author);

    // Buch hinzufügen
    literature.getBookList().add(book);

    return literature;
  }
}
</pre>
<h2>Ergebnis</h2>
<p>Nachdem die Datei XMLCreator.java ausgeführt wurde, wird zum einen das Ergebnis in der Konsole ausgegeben und zum anderen in der neu angelegten Datei <em>literature.xml</em> gespeichert.<br />
Man beachte, dass die Tagnamen wie vorgeschrieben benannt wurden.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?&gt;
&lt;ns2:literature xmlns:ns2=&quot;http://www.itblogging.de/myNameSpace&quot;
	version=&quot;0.1&quot;&gt;
	&lt;currentTime&gt;2012-04-09T20:39:52.364+02:00&lt;/currentTime&gt;
	&lt;booklist&gt;
		&lt;book&gt;
			&lt;title&gt;Einstieg in XML&lt;/title&gt;
			&lt;isbn&gt;3-89842-488-X&lt;/isbn&gt;
			&lt;editionInfo&gt;
				&lt;numberOfEdition&gt;2&lt;/numberOfEdition&gt;
				&lt;publicationYear&gt;2004&lt;/publicationYear&gt;
				&lt;publisher&gt;Galileo Computing&lt;/publisher&gt;
			&lt;/editionInfo&gt;
			&lt;authorlist&gt;
				&lt;author&gt;
					&lt;firstName&gt;Helmut&lt;/firstName&gt;
					&lt;lastName&gt;Vonhoegen&lt;/lastName&gt;
				&lt;/author&gt;
			&lt;/authorlist&gt;
		&lt;/book&gt;
	&lt;/booklist&gt;
&lt;/ns2:literature&gt;
</pre>
<p>Das JAXB Tutorial steht auch als zip-Datei zum <a href='http://www.itblogging.de/wp-content/uploads/2012/04/jaxbTutorial.zip'>Download</a> zur Verfügung.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/java/jaxb-tutorial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracla Java (JDK) 7 in Ubuntu installieren</title>
		<link>http://www.itblogging.de/linux/oracla-java-jdk-7-in-ubuntu-installieren/</link>
		<comments>http://www.itblogging.de/linux/oracla-java-jdk-7-in-ubuntu-installieren/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 20:20:59 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[java7]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1832</guid>
		<description><![CDATA[Wer statt dem OpenJDK das Oracle JDK 7 in Ubuntu installieren möchte, kann dies in wenigen Schritten mit dem Hinzufügen eines PPA&#8217;s (Personal Package Archive) nachholen. Aufgrund der neuen Java Lizenzen ist das Oracle JDK7 selbst nicht im offiziellen Repository enthalten. Oracle Java 7 installieren Das Team webupd8 stellt ein PPA zur Verfügung, mit Hilfe [...]]]></description>
			<content:encoded><![CDATA[<p>Wer statt dem OpenJDK das Oracle JDK 7 in Ubuntu installieren möchte, kann dies in wenigen Schritten mit dem Hinzufügen eines PPA&#8217;s (Personal Package Archive) nachholen.<br />
Aufgrund der neuen Java Lizenzen ist das Oracle JDK7 selbst nicht im offiziellen Repository enthalten.<br />
<span id="more-1832"></span></p>
<h2>Oracle Java 7 installieren</h2>
<p>Das Team webupd8 stellt ein <a href="https://launchpad.net/~webupd8team/+archive/java" title="PPA">PPA</a> zur Verfügung, mit Hilfe dessen Java 7 in wenigen Schritten installiert werden kann. Hierbei wird von der offiziellen Oracle Website der aktuellste Stand herunter geladen und auf der Workstation installiert.</p>
<p>Bitte beachtet, das es sich hierbei nicht um ein offizielles PPA des Herstellers handelt. Die Installation erfolgt auf eigene Gefahr.</p>
<pre class="brush: bash; title: ; notranslate">
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer
</pre>
<h2>Aktuelle Java Version prüfen</h2>
<p>Die aktuell auf der Plattform installierte Version kann wie folgt geprüft werden:</p>
<pre class="brush: bash; title: ; notranslate">
java -help
</pre>
<h3>Vorher</h3>
<p>Das Ergebnis betrifft natürlich meinen lokalen Rechner und kann bei jedem anders aussehen.</p>
<pre class="brush: bash; title: ; notranslate">
java version &quot;1.6.0_23&quot;
OpenJDK Runtime Environment (IcedTea6 1.11pre) (6b23~pre11-0ubuntu1.11.10.2)
OpenJDK Server VM (build 20.0-b11, mixed mode)
</pre>
<h3>Nachher</h3>
<p>Nach der Durchführung ist die Java Version 7 installiert.</p>
<pre class="brush: bash; title: ; notranslate">
java version &quot;1.7.0_03&quot;
Java(TM) SE Runtime Environment (build 1.7.0_03-b04)
Java HotSpot(TM) Server VM (build 22.1-b02, mixed mode)
</pre>
<h2>Oracle Java 7 deinstallieren</h2>
<p>Für den Fall das die Version 7 wieder deinstalliert werden soll, reicht folgendes Kommando.</p>
<pre class="brush: bash; title: ; notranslate">
sudo apt-get remove oracle-java7-installer
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/linux/oracla-java-jdk-7-in-ubuntu-installieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring JdbcTemplate Query Beispiele</title>
		<link>http://www.itblogging.de/java/spring-jdbctemplate-query-beispiele/</link>
		<comments>http://www.itblogging.de/java/spring-jdbctemplate-query-beispiele/#comments</comments>
		<pubDate>Mon, 02 Apr 2012 21:03:40 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[jdbc]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1822</guid>
		<description><![CDATA[Spring bietet mit Hilfe des JdbcTemplates verschiedene Möglichkeiten, Daten aus der Datenbank zu lesen. Im Nachfolgenden sollen hierzu verschiedene Wege anhand einiger Beispiele aufgeführt werden. Da ich an dieser Stelle nicht im Detail darauf eingehen möchte wie ein JdbcTemplate erstellt wird, hilft allen Unwissenden das Tutorial Spring MySQL (JDBC) Tutorial weiter. Als Datenbank wird sakila [...]]]></description>
			<content:encoded><![CDATA[<p>Spring bietet mit Hilfe des JdbcTemplates verschiedene Möglichkeiten, Daten aus der Datenbank zu lesen. Im Nachfolgenden sollen hierzu verschiedene Wege anhand einiger Beispiele aufgeführt werden.<br />
Da ich an dieser Stelle nicht im Detail darauf eingehen möchte wie ein JdbcTemplate erstellt wird, hilft allen Unwissenden das Tutorial <a href="http://www.itblogging.de/java/spring-mysql-jdbc-tutorial/" title="Spring MySQL (JDBC) Tutorial">Spring MySQL (JDBC) Tutorial</a> weiter. Als Datenbank wird sakila verwendet. Was sakila ist, woher es kommt und wie sie importiert wird, zeigt der Blogbeitrag <a href="http://www.itblogging.de/datenbank/mysql-server-installieren/" title="MySQL Server installieren">MySQL Server installieren</a> unter dem Punkt <strong>Testdatenbank Sakila installieren</strong>.<br />
<span id="more-1822"></span></p>
<p>Sollen Daten nicht nur abgerufen, sondern auch in die Datenbank gepusht werden, geschieht dies in der Regel mit dem <em>JdbcInsert</em>. Anwendungsbespiele gibt es im Artikel <a href="http://www.itblogging.de/java/spring-jdbcinsert-beispiele/" title="Spring JdbcInsert Beispiele">Spring JdbcInsert Beispiele</a>.</p>
<h2>Single Value Abfragen</h2>
<h3>Count Abfrage</h3>
<p>Die <em>queryForInt()</em> Abfrage kann beispielsweise gut dafür genutzt werden, um die Anzahl von Ergebnissen aus einer Gruppe abzurufen.<br />
Die verwendete <em>COUNT()</em> Abfrage liefert natürlich immer ein Ergebnis, auch dann wenn die Suchabfrage kein Ergebnis liefert ; &#8211; )</p>
<pre class="brush: java; title: ; notranslate">
String searchName = &quot;Simon&quot;;
DataSource dataSource = ... //
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql = &quot;SELECT COUNT(*) FROM  customer WHERE first_Name LIKE '%?%'&quot;;
int resCount = jdbcTemplate.queryForInt(sql, searchName);
System.out.println(&quot;Anzahl gefundener Datensätze: &quot; + resCount);
</pre>
<h3>Single Row Query</h3>
<p>Einzelne Werte bestimmter Datentypen können mit Hilfe von <em>queryForObject()</em> abgerufen werden. Wichtig bei dieser Abfrage ist, dass das Ergebnis genau einen Wert zurück gibt:</p>
<h4>String</h4>
<p>Der zweite Parameter <em>String.class</em> der <em>queryForObject()</em> Methode gibt den Rückgabetypen an. </p>
<pre class="brush: java; title: ; notranslate">
int customerId = 1;
DataSource dataSource = ... //
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql = &quot;SELECT first_Name FROM customer WHERE customer_id = ?&quot;;
String firstName = jdbcTemplate.queryForObject(sql, String.class, customerId);
System.out.println(firstName);
</pre>
<h4>Integer</h4>
<p>Analog zu der String Abfrage, klappt dies natürlich auch für Integer Werte.</p>
<pre class="brush: java; title: ; notranslate">
int customerId = 1;
DataSource dataSource = ... //
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql = &quot;SELECT store_id FROM customer WHERE customer_id = ?&quot;;
int storeId = jdbcTemplate.queryForObject(sql, Integer.class, customerId);
</pre>
<p>Bei Integer Rrückgabetypen gibt es noch die <strong>Alternative</strong> <em>queryForInt()</em>:</p>
<pre class="brush: java; title: ; notranslate">
String sql = &quot;SELECT store_id FROM customer WHERE customer_id = ?&quot;;
int storeId = jdbcTemplate.queryForInt(sql, customerId);
</pre>
<h4>Date</h4>
<p>Auch die Abfrage nach einem Datum ist möglich:</p>
<pre class="brush: java; title: ; notranslate">
int customerId = 1;
DataSource dataSource = ... //
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql = &quot;SELECT create_date FROM customer WHERE customer_id = ?&quot;;
int storeId = jdbcTemplate.queryForObject(sql, java.util.Date.class, customerId);
</pre>
<h2>Single Map Query</h2>
<p>Die Single Map Abfrage erwartet ebenfalls genau ein Ergebnis. Der Key der Map entspricht dem Spaltennamen der Tabelle.</p>
<pre class="brush: java; title: ; notranslate">
int customerId = 1;
DataSource dataSource = ... //
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql = &quot;SELECT * FROM customer WHERE customer_id = ?&quot;;
Map&lt;String, Object&gt; singleMap = jdbcTemplate.queryForMap(sql, customerId);
for(Entry&lt;String, Object&gt; entry : singleMap.entrySet())
{
  System.out.println(entry.getKey() + &quot; / &quot; + entry.getValue());
}
</pre>
<h2>List Querys</h2>
<p>Wenn bereits vor der Abfrage klar ist, dass die Ergebnismenge größer eins sein kann, hilft die Methode <em>queryForList()</em> weiter.</p>
<h3>String List</h3>
<pre class="brush: java; title: ; notranslate">
int storeId = 1;
DataSource dataSource = ... //
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql = &quot;SELECT first_Name FROM customer WHERE store_id =  ?&quot;;
List&lt;String&gt; firstNameList = jdbcTemplate.queryForList(sql, String.class, storeId);
System.out.println(firstNameList.size());
</pre>
<h3>Integer List, Long List, Date List</h3>
<p>Analog zu der String List, kann <em>queryForList()</em> natürlich auch für andere Datentypen genutzt werden.</p>
<h3>List of Maps Query</h3>
<p>Ein Beispiel wie eine Tabelle mit allen Tabellenspalten ausgelesen werden kann.</p>
<pre class="brush: java; title: ; notranslate">
int storeId = 1;
DataSource dataSource = ... //
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql = &quot;SELECT * FROM customer WHERE store_id = ?&quot;;
List&lt;Map&lt;String, Object&gt;&gt; mapList = jdbcTemplate.queryForList(sql, storeId);

for(Map&lt;String, Object&gt; entryMap : mapList)
{
  for(Entry&lt;String, Object&gt; entry : entryMap.entrySet())
  {
    // Spaltenname = Key; Spalteninhalt = Value
    System.out.println(entry.getKey() + &quot; / &quot; + entry.getValue());
  }
  System.out.println(&quot;---&quot;);
}
</pre>
<h3>SqlRowSet</h3>
<p>Der Rückgabetyp <em>RowSet</em> ist natürlich auch möglich:</p>
<pre class="brush: java; title: ; notranslate">
DataSource dataSource = ... //
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql = &quot;SELECT * FROM customer&quot;;
SqlRowSet rowSet = jdbcTemplate.queryForRowSet(sql);

while(rowSet.next())
{
  String firstName = rowSet.getString(&quot;first_name&quot;);
  String lastName = rowSet.getString(&quot;last_name&quot;);
  System.out.println(&quot;Vorname: &quot; + firstName);
  System.out.println(&quot;Nachname: &quot; + lastName);
  System.out.println(&quot;---”);
}
</pre>
<h2>RowMapper</h2>
<p>Datenbankabfragen sollen meist in Java Objekte umgewandelt werden. Um nicht bei jeder Abfrage das Ergebnis des SQL-Statements erneut einlesen zu müssen, verschaffen die RowMapper Abhilfe.</p>
<h3>Ausgelagerte Rowmapper</h3>
<p>Die Klasse muss das Interface <em>RowMapper<T></em> implementieren und die Methode <em>mapRow</em> überschreiben.</p>
<pre class="brush: java; title: ; notranslate">
import java.sql.ResultSet;
import java.sql.SQLException;

import org.springframework.jdbc.core.RowMapper;

public class CustomerRowMapper implements RowMapper&lt;Customer&gt;
{
  @Override
  public Customer mapRow(ResultSet rs, int rowNum) throws SQLException
  {
	Customer customer = new Customer();
	customer.setFirstName(rs.getString(&quot;first_Name&quot;));
	customer.setLastName(rs.getString(&quot;first_Name&quot;));
	customer.setEmail(rs.getString(&quot;email&quot;));

	return customer;
  }
}
</pre>
<h3>RowMapper Query</h3>
<pre class="brush: java; title: ; notranslate">
DataSource dataSource = ... //
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql = &quot;SELECT * FROM customer&quot;;
List&lt;Customer&gt; customerList = jdbcTemplate.query(sql, new CustomerRowMapper());
</pre>
<p><strong>Alternative</strong> kann der RowMapper natürlich auch als anonyme innere Klasse implementiert werden.</p>
<pre class="brush: java; title: ; notranslate">
String sql = &quot;SELECT * FROM customer&quot;;
List&lt;Customer&gt; customerList = jdbcTemplate.query(sql, new RowMapper&lt;Customer&gt;(){

  @Override
  public Customer mapRow(ResultSet rs, int rowNum) throws SQLException
  {
    Customer customer = new Customer();
    customer.setFirstName(rs.getString(&quot;first_Name&quot;));
    customer.setLastName(rs.getString(&quot;first_Name&quot;));
    customer.setEmail(rs.getString(&quot;email&quot;));

    return customer;
  }

});
</pre>
<p>Das war&#8217;s. Viel Spaß beim Abfragen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/java/spring-jdbctemplate-query-beispiele/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>XSD Datei aus XML Datei generieren</title>
		<link>http://www.itblogging.de/java/xsd-datei-aus-xml-datei-generieren/</link>
		<comments>http://www.itblogging.de/java/xsd-datei-aus-xml-datei-generieren/#comments</comments>
		<pubDate>Sun, 01 Apr 2012 16:30:10 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XSD]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1799</guid>
		<description><![CDATA[Normalerweise ist es so, das mir als Entwickler im WebService Bereich WSDL-Dateien oder XSD-Dateien vorliegen. Aus beiden Dateiformaten lassen sich zur späteren Verarbeitung wunderbar Java Klassen generieren. Vor einiger Zeit hatte ich jedoch das Problem, das mir ein Unternehmen lediglich eine XML-Datei zur Verfügung stellen konnte. Dies ist zugegebenermaßen eine Ausnahme und wohl nur der [...]]]></description>
			<content:encoded><![CDATA[<p>Normalerweise ist es so, das mir als Entwickler im WebService Bereich WSDL-Dateien oder XSD-Dateien vorliegen. Aus beiden Dateiformaten lassen sich zur späteren Verarbeitung wunderbar Java Klassen generieren. Vor einiger Zeit hatte ich jedoch das Problem, das mir ein Unternehmen lediglich eine XML-Datei zur Verfügung stellen konnte. Dies ist zugegebenermaßen eine Ausnahme und wohl nur der Versuch eine Art WebService zur Verfügung zu stellen.<br />
<span id="more-1799"></span><br />
Dennoch stand ich vor der Schwierigkeit, die XML-Datei mit Java verarbeiten zu müssen. Natürlich kann an dieser Stelle mühselig ein eigener Wrapper manuell erstellt werden. Effektiv ist aber was anderes &#8230;<br />
Auf der Suche nach einer angemesseneren Lösung bin ich über das Kommandozeilen-Tool <a href="https://code.google.com/p/jing-trang/" title="Jing-Trang">jing-trang</a> gestolpert. </p>
<p>Ziemlich einfach, ziemlich effektiv.</p>
<p>Anhand eines kleinem Beispiels werde ich das Tool nun demonstrieren. Verwendet wird die Version trang-20091111.zip (aktueller Stand zum Zeitpunkt der Veröffentlichung dieses Beitrages).</p>
<h2>Vorbereitung</h2>
<p>Im ersten Schritt wird die aktuelle Jing-Trang Version im <a href="https://code.google.com/p/jing-trang/downloads/list" title="Download Bereich">Download Bereich</a> heruntergeladen und in ein beliebiges Verzeichnis entpackt. Entpackt habe ich die Datei <em>trang-20091111.zip</em> in folgenden Ordner: <em>~/Desktop/xsd2xml</em>.<br />
In dem entpacktem Ordner befinden sich vier Dateien, wobei die wichtigste wohl das Tool mit dem Namen <em>trang.jar</em> ist. </p>
<h2>XML-Datei</h2>
<p>Als Vorlage verwende ich die XML-Datei aus dem <a href="http://www.itblogging.de/java/java-und-xml-tutorial/" title="Java und XML Tutorial">Java und XML Tutorial</a>. Einziger Unterschied: Die Verlinkung auf die DTD Datei (<em>< !DOCTYPE literature SYSTEM "literature.dtd"></em>) wurde entfernt.</p>
<p>Die Datei befindet sich in dem Verzeichnis <em>~/Desktop/xsd2xml</em>.</p>
<p>Hierzu ein kleiner Auszug aus der Datei.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;

&lt;literature&gt;
  &lt;book&gt;
    &lt;authors&gt;
      &lt;author&gt;
        &lt;firstName&gt;Helmut&lt;/firstName&gt;
        &lt;lastName&gt;Vonhoegen&lt;/lastName&gt;
      &lt;/author&gt;
    &lt;/authors&gt;
    &lt;title&gt;Einstieg in XML&lt;/title&gt;
    &lt;edition&gt;
      &lt;publisher&gt;Galileo Computing&lt;/publisher&gt;
      &lt;editionNo&gt;2&lt;/editionNo&gt;
      &lt;publicationYear&gt;2004&lt;/publicationYear&gt;
    &lt;/edition&gt;
    &lt;ISBN&gt;3-89842-488-X&lt;/ISBN&gt;
  &lt;/book&gt;
  &lt;book&gt;
  ...
&lt;/literature&gt;
</pre>
<h2>XSD-Datei generieren</h2>
<p>Zur Generierung der XSD-Datei wird das Tool mit zwei Parametern aufgerufen. Der erste Parameter (<em>literatur.xml</em>) gibt die Quelldatei an, der zweite (<em>literatur.xsd</em>) die Zieldatei. </p>
<pre class="brush: bash; title: ; notranslate">java -jar ~/Desktop/xsd2xml/trang-20091111/trang.jar literatur.xml literatur.xsd</pre>
<h2>Ergebnis</h2>
<p>Erstellt wurde wie erwartet die Datei <em>literatur.xsd</em> in dem Verzeichnis <em>~/Desktop/xsd2xml/</em>. </p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;xs:schema xmlns:xs=&quot;http://www.w3.org/2001/XMLSchema&quot; elementFormDefault=&quot;qualified&quot;&gt;
  &lt;xs:element name=&quot;literature&quot;&gt;
    &lt;xs:complexType&gt;
      &lt;xs:sequence&gt;
        &lt;xs:element maxOccurs=&quot;unbounded&quot; ref=&quot;book&quot;/&gt;
      &lt;/xs:sequence&gt;
    &lt;/xs:complexType&gt;
  &lt;/xs:element&gt;
  &lt;xs:element name=&quot;book&quot;&gt;
    &lt;xs:complexType&gt;
      &lt;xs:sequence&gt;
        &lt;xs:element ref=&quot;authors&quot;/&gt;
        &lt;xs:element ref=&quot;title&quot;/&gt;
        &lt;xs:element ref=&quot;edition&quot;/&gt;
        &lt;xs:element ref=&quot;ISBN&quot;/&gt;
      &lt;/xs:sequence&gt;
    &lt;/xs:complexType&gt;
  &lt;/xs:element&gt;
  &lt;xs:element name=&quot;authors&quot;&gt;
    &lt;xs:complexType&gt;
      &lt;xs:sequence&gt;
        &lt;xs:element maxOccurs=&quot;unbounded&quot; ref=&quot;author&quot;/&gt;
      &lt;/xs:sequence&gt;
    &lt;/xs:complexType&gt;
  &lt;/xs:element&gt;
  &lt;xs:element name=&quot;author&quot;&gt;
    &lt;xs:complexType&gt;
      &lt;xs:sequence&gt;
        &lt;xs:element ref=&quot;firstName&quot;/&gt;
        &lt;xs:element ref=&quot;lastName&quot;/&gt;
      &lt;/xs:sequence&gt;
    &lt;/xs:complexType&gt;
  &lt;/xs:element&gt;
  &lt;xs:element name=&quot;firstName&quot; type=&quot;xs:string&quot;/&gt;
  &lt;xs:element name=&quot;lastName&quot; type=&quot;xs:NCName&quot;/&gt;
  &lt;xs:element name=&quot;title&quot; type=&quot;xs:string&quot;/&gt;
  &lt;xs:element name=&quot;edition&quot;&gt;
    &lt;xs:complexType&gt;
      &lt;xs:sequence&gt;
        &lt;xs:element ref=&quot;publisher&quot;/&gt;
        &lt;xs:element ref=&quot;editionNo&quot;/&gt;
        &lt;xs:element ref=&quot;publicationYear&quot;/&gt;
      &lt;/xs:sequence&gt;
    &lt;/xs:complexType&gt;
  &lt;/xs:element&gt;
  &lt;xs:element name=&quot;publisher&quot; type=&quot;xs:string&quot;/&gt;
  &lt;xs:element name=&quot;editionNo&quot; type=&quot;xs:integer&quot;/&gt;
  &lt;xs:element name=&quot;publicationYear&quot; type=&quot;xs:integer&quot;/&gt;
  &lt;xs:element name=&quot;ISBN&quot; type=&quot;xs:NMTOKEN&quot;/&gt;
&lt;/xs:schema&gt;
</pre>
<p>Ein kleiner Tipp: Wenn das Tool öfter Verwendung findet könnte darüber nachgedacht werden den Link auf die trang.jar Datei in die <em>bashrc</em> als alias zu schreiben, um nicht jedes Mal den vollqualifizierten Pfad angeben zu müssen. Konkret könnte dies so aussehen:</p>
<pre class="brush: bash; title: ; notranslate">alias xml2xsd='java -jar ~/Desktop/xsd2xml/trang-20091111/trang.jar'</pre>
<p>Die Generierung einer Datei wird dann wie folgt aufgerufen:</p>
<pre class="brush: bash; title: ; notranslate">xml2xsd literatur.xml literatur.xsd</pre>
<p>Das Beispiel kann mit allen vollständigen Dateien als ZIP Datei <a href="http://www.itblogging.de/wp-content/uploads/2012/04/xsd2xml.zip">heruntergeladen</a> werden.</p>
<p>Viel Spaß</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/java/xsd-datei-aus-xml-datei-generieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Verlosung: BitDefender Internet Security 2012</title>
		<link>http://www.itblogging.de/news/verlosung-bitdefender-internet-security-2012/</link>
		<comments>http://www.itblogging.de/news/verlosung-bitdefender-internet-security-2012/#comments</comments>
		<pubDate>Sun, 18 Mar 2012 22:17:06 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1783</guid>
		<description><![CDATA[Als langjähriger BitDefender Kunde habe ich nun fünf kostenlose BitDefender-Lizenzschlüssel für das Produkt Bitdefender Total Security 2012 erhalten. Die Aufforderung die Lizenzschlüssel an Freunde weiter zu reichen, nutze ich um die treuen (Windows) Leser von itblogging.de zu erfreuen. Daher werde ich die Lizenzen unter allen Teilnehmern verlosen. Also: Mitmachen, weiter sagen und gewinnen. Teilnahme Es [...]]]></description>
			<content:encoded><![CDATA[<p>Als langjähriger BitDefender Kunde habe ich nun fünf kostenlose BitDefender-Lizenzschlüssel für das Produkt <strong>Bitdefender Total Security 2012</strong> erhalten.<br />
Die Aufforderung die Lizenzschlüssel an Freunde weiter zu reichen, nutze ich um die treuen (Windows) Leser von itblogging.de zu erfreuen.<br />
Daher werde ich die Lizenzen unter allen Teilnehmern verlosen. Also: Mitmachen, weiter sagen und gewinnen.<br />
<span id="more-1783"></span></p>
<h2>Teilnahme</h2>
<p>Es nimmt jeder Leser teil, der diesen Blogeintrag kommentiert. Für die Verlosung ist eine gültige E-Mail Adresse erforderlich. Jeder Teilnehmer hat die gleichen Chancen.</p>
<h2>Dauer der Verlosung</h2>
<p>Es nehmen alles Leser teil, die bis Mittwoch den 21.03.2012 um 19:00 Uhr einen Kommentar mit einer gültigen E-Mail Adresse verfassen.</p>
<h2>Auslosung</h2>
<p>Die Auslosung werde ich durch ein Zufallsprinzip vornehmen und die Gewinner am Mittwoch den 21.03.2012 ab 20 Uhr an dieser Stelle veröffentlichen.</p>
<h2>Produktinformationen</h2>
<p>Die Lizenz gilt für folgendes Produkt: <a href="http://www.bitdefender.de/solutions/internet-security.html" title="BitDefender Internet Sercurity 2012">BitDefender Internet Security 2012</a>. Die Lizenz ist gültig für einen PC mit eine Dauer von einem Jahr. Wert einer Lizenz: <strong>49,95 EURO</strong>.</p>
<p>Informationen von BitDefender:</p>
<blockquote><p>Bitdefender Internet Security 2012 kombiniert Virenschutz, Spam-Schutz, Phishing-Schutz, Firewall, Kindersicherung und Sicherheit in sozialen Netzwerken in einer Lösung, die idealen Hintergrundschutz für Familien mit Internet-Anschluss bietet.</p></blockquote>
<p>Noch ein Hinweis: Da die BitDefender Lizenzen am Mittwoch ablaufen, müssen die Gewinner noch am gleichen Abend die Lizenzschlüssel bei BitDefender aktivieren. Gut möglich das dies auch noch Tage später klappt, dies kann ich jedoch nicht garantieren.</p>
<p>Ich übernehme keine Garantie für die Gültigkeit der Lizenzschlüssel. Diese habe ich von BitDefender per E-Mail erhalten und möchte sie an dieser Stelle lediglich an meine Leser weiterreichen.</p>
<p>Noch etwas: Ich freue mich über jeden <a href="http://www.itblogging.de/feed/">RSS-Feed Abonnierer</a>, Follower auf <a href="https://twitter.com/#!/itbloggingde">twitter</a> oder auf <a href="https://plus.google.com/111640634552044465134">Google+</a>.</p>
<p>Viel Glück</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/news/verlosung-bitdefender-internet-security-2012/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Firefox und Thunderbird 9 auf Ubuntu 11.10</title>
		<link>http://www.itblogging.de/linux/firefox-und-thunderbird-9-auf-ubuntu-11-10/</link>
		<comments>http://www.itblogging.de/linux/firefox-und-thunderbird-9-auf-ubuntu-11-10/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 21:05:04 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Thunderbird]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1771</guid>
		<description><![CDATA[Ubuntu 11.10 Nutzer wundern sich wahrscheinlich, warum seit längerer Zeit der neue Firefox sowie Thunderbird in der Version 9 auf dem Markt ist, jedoch keiner der beiden Softwareanwendungen sich automatisch aktualisiert. Das Hinzufügen eines Personal Package Archive (ppa) bringt die Lösung. Einfach die folgenden drei Linux Befehle in die Konsole kopieren, Firefox und Thunderbird neustarten, [...]]]></description>
			<content:encoded><![CDATA[<p>Ubuntu 11.10 Nutzer wundern sich wahrscheinlich, warum seit längerer Zeit der neue Firefox sowie Thunderbird in der Version 9 auf dem Markt ist, jedoch keiner der beiden Softwareanwendungen sich automatisch aktualisiert.<br />
Das Hinzufügen eines Personal Package Archive (ppa) bringt die Lösung.<br />
<span id="more-1771"></span></p>
<p>Einfach die folgenden drei Linux Befehle in die Konsole kopieren, Firefox und Thunderbird neustarten, fertig.</p>
<pre class="brush: bash; title: ; notranslate">
sudo apt-add-repository ppa:ubuntu-mozilla-security/ppa
sudo apt-get update
sudo apt-get dist-upgrade
</pre>
<p><a class="lightbox" title="Firefox 9 unter Ubuntu 11.10" href="http://www.itblogging.de/wp-content/uploads/2011/12/Ubuntu1110_Firefox9.png"><img src="http://www.itblogging.de/wp-content/uploads/2011/12/Ubuntu1110_Firefox9-475x196.png" alt="" title="Ubuntu1110_Firefox9" width="475" height="196" class="alignnone size-medium wp-image-1774" /></a></p>
<p><a class="lightbox" title="Thunderbird 9 unter Ubuntu 11.10" href="http://www.itblogging.de/wp-content/uploads/2011/12/Ubuntu1110_Thunderbird9.png"><img src="http://www.itblogging.de/wp-content/uploads/2011/12/Ubuntu1110_Thunderbird9-475x194.png" alt="" title="Ubuntu1110_Thunderbird9" width="475" height="194" class="alignnone size-medium wp-image-1776" /></a></p>
<p><strong>Update: </strong> Das Hinzufügen des Repositories aktualisiert Firefox und Thunderbird stets auf die aktuellsten Versionen (Aktuell: Firefox 10, Thunderbird 10). Durch den Updatechannel werden stets die neusten Versionen über die Aktualisierungsverwaltung zeitnah nach der Veröffentlichung durch Mozilla aktualisiert.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/linux/firefox-und-thunderbird-9-auf-ubuntu-11-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Personalisierte Starter auf dem Unity Desktop und im Startmenü anlegen</title>
		<link>http://www.itblogging.de/linux/personalisierte-starter-auf-dem-unity-desktop-und-im-startmenu-anlegen/</link>
		<comments>http://www.itblogging.de/linux/personalisierte-starter-auf-dem-unity-desktop-und-im-startmenu-anlegen/#comments</comments>
		<pubDate>Thu, 22 Dec 2011 22:36:56 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Unity]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1759</guid>
		<description><![CDATA[Durch die endgültige Umstellung auf den Unity Desktop in der Ubuntu Version 11.10, muss sich wohl jeder der sich dazu entschieden hat Ubuntu treu zu bleiben, nun doch gezwungenermaßen mit dem neuen Desktop auseinandersetzen. Mich persönlich konnte bis heute der Unity Desktop noch nicht überzeugen, wo doch einige ganz simple Funktionen ohne jedes Verständnis weggefallen [...]]]></description>
			<content:encoded><![CDATA[<p>Durch die endgültige Umstellung auf den Unity Desktop in der Ubuntu Version 11.10, muss sich wohl jeder der sich dazu entschieden hat Ubuntu treu zu bleiben, nun doch gezwungenermaßen mit dem neuen Desktop auseinandersetzen. Mich persönlich konnte bis heute der Unity Desktop noch nicht überzeugen, wo doch einige ganz simple Funktionen ohne jedes Verständnis weggefallen sind. Allein die Tatsache wie schwer es dem Anwender gemacht wird, das Startmenü nach belieben zu modifizieren oder aber einen Starter auf den Desktop zu erstellen, ist für mich nicht nachvollziehbar. Inzwischen habe ich für dieses &#8220;Problem&#8221; eine Lösung gefunden, die ich nicht für mich behalten möchte.<br />
<span id="more-1759"></span></p>
<p>Zunächst einmal habe ich mir ein eigenen Ordner für die personalisierten Starter in meinem Home Verzeichnis angelegt. </p>
<pre class="brush: bash; title: ; notranslate">/home/simon/starter</pre>
<p>Anschließend wird die Firefox Desktop Konfigurationsdatei (dies klappt natürlich auch mit jeder anderen Desktop Konfigurationsdatei) aus dem Applications Ordner in meinen &#8220;starter&#8221; Ordner kopiert.</p>
<pre class="brush: bash; title: ; notranslate">/usr/share/applications</pre>
<p>Einmal in den Terminal gewechselt werden neue Rechte vergeben und der Eigentümer gewechselt:</p>
<pre class="brush: bash; title: ; notranslate">sudo chown simon:simon firefox.desktop</pre>
<pre class="brush: bash; title: ; notranslate">sudo chmod 744 firefox.desktop</pre>
<p>Zum Schluss noch die Starterkonfiguration mit einem Link zu der Anwendung füllen, einen neuen Namen und eine Beschreibung geben, fertig.<br />
Der folgende Screenshot zeigt beispielsweise mein Starter zu der Eclipse IDE.</p>
<p><a class="lightbox" title="Eclipse Starter"  href="http://www.itblogging.de/wp-content/uploads/2011/12/eclipse_starter.png"><img src="http://www.itblogging.de/wp-content/uploads/2011/12/eclipse_starter-475x387.png" alt="" title="eclipse_starter" width="475" height="387" class="alignnone size-medium wp-image-1766" /></a></p>
<p>Eine Kopie dieses Starters kann nun beliebig auf den Desktop oder aber auch in das Startmenü gezogen werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/linux/personalisierte-starter-auf-dem-unity-desktop-und-im-startmenu-anlegen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 6/13 queries in 0.022 seconds using disk: basic

Served from: www.itblogging.de @ 2012-05-19 02:09:57 -->
