JDOM, XML und Beans (Streaming?)

Commander81

Grünschnabel
Hallo, ich habe folgendes Problem:

Ich habe ihm Rahmen der Programmierung eines CMS die Aufgabe eine XML zu erstellen, diese in einem Bean abzuspeichern und den Inhalt des Beans in eine MySQL DB mit Datenfeldtyp "blob" zu schreiben.

Hier ist mein derzeitiger Stand:

Code:
package de.sopral.pbcms.dom;

import de.sopral.pbcms.beans.*;
import org.jdom.*;
import org.jdom.output.*;
import java.io.*;
import java.util.*;

public class XMLerstellen {
	 
	 static Document doc;
	 
	 public XMLerstellen(InhaltBean inhaltBean, SeiteBean seiteBean, BenutzerBean benutzerBean, ProtokolleintragBean protokolleintragBean, MediumBean mediumBean)
	 {
	 Element root 				= new Element("content");  	// Wurzelelement wird erzeugt
	 doc 						= new Document(root);       // Das neue Dokument bekommt das Wurzelelement zugewiesen
   
	 //Hier steht das gesamte XML Processing, ist aber für die Frage irrelevant.
	 
	 XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
	

        // outstream = outputter.output(doc, outstream);
	// byte[] xmlarray = inhaltXML.getBytes();
	// inhaltBean.setInhaltsXML(xmlarray);
	 }
}

Das Problem liegt jetzt darin das mit JDOM erstellte XML-Dokument in das Bean zu bekommen. Der Datentyp im Bean ist ein byte[]. Die Klasse XMLOutputter hat eine Methode namens Output und ist laut jdom.org wie folgt aufgebaut:
output(Document doc, java.io.OutputStream out)
This will print the Document to the given output stream.

Da ich absoluter Anfänger in der Javaprogrammierung bin und nicht so wirklich etwas mit Streamings anfangen kann, wäre es nett wenn mir jemand ein wenig Hilfe geben würde.
 
So, ich habe mal nen bissel was ausprobiert.
Da ich bei mir lokal leider keinen Tomcat und das andere Gedöns installiert habe mal die Frage ob der Code so laufen würde:

Code:
try {
	 ByteArrayOutputStream outstream = new ByteArrayOutputStream();
	 XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
	 outputter.output(doc, outstream);
	 byte[] xmlarray = outstream.toByteArray();
	 inhaltBean.setInhaltsXML(xmlarray);
	 
	 }
	 catch (IOException e){}
	 
	 }

Macht der Code das was ich will?
Also das XML als Byte[] in das InhaltsBean streamen?
Sprich: Würde sich bei der Ausführung im Inhaltsbean der XML-Inhalt befinden?
 
Da steht

This makes it easy for you to incorporate XML data and processing functions in applications based on Java technology without having to know much about XML itself.

Lieber wäre mir aber:

This makes it easy for you to incorporate XML data and processing functions in applications based on Java technology without having to know much about Java itself.

:D

Mit XML selber habe ich eigentlich (bisher) noch keine Probleme ;)
 
Hallo!

um normale Beans zu Serialisieren könntest du auch den XMLEncoder/XMLDecoder verwenden:

Java:
/**
 * 
 */
package de.tutorials;

import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author Tom
 * 
 */
public class XmlBeanSerializationExample {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {

        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        XMLEncoder xmlEncoder = new XMLEncoder(byteArrayOutputStream);

        Person person = new Person("Thomas", new SimpleDateFormat("dd.MM.yyyy")
                .parse("29.08.1983"));

        System.out.println(person);

        xmlEncoder.writeObject(person);
        xmlEncoder.close();

        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(
                byteArrayOutputStream.toByteArray());
        XMLDecoder xmlDecoder = new XMLDecoder(byteArrayInputStream);
        Person samePerson = (Person) xmlDecoder.readObject();
        xmlDecoder.close();
        System.out.println(samePerson);

    }

    public static class Person {
        String name;

        Date dateOfBirth;

        public Person() {

        }

        public Person(String name, Date dateOfBirth) {
            super();
            this.name = name;
            this.dateOfBirth = dateOfBirth;
        }

        /**
         * @return the dateOfBirth
         */
        public Date getDateOfBirth() {
            return dateOfBirth;
        }

        /**
         * @param dateOfBirth
         *            the dateOfBirth to set
         */
        public void setDateOfBirth(Date dateOfBirth) {
            this.dateOfBirth = dateOfBirth;
        }

        /**
         * @return the name
         */
        public String getName() {
            return name;
        }

        /**
         * @param name
         *            the name to set
         */
        public void setName(String name) {
            this.name = name;
        }

        @Override
        public String toString() {
            return this.name + " " + this.dateOfBirth;
        }
    }

}

Gruß Tom
 
Zurück