/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Serialisering til XML
Fra : Søren sømand


Dato : 18-01-07 17:03

Hej Drenge(går jeg ud fra ...)
Jeg har et problem med at få noget serializering til at virke. Jeg har et
"person" object der indeholder nogle int og Strenge med navn alder osv.
Det vil jeg gerne have gemt i XML format. Jeg har prøvet XMLencoder og
XMLdecoder, til at læse, men Eclipse kommer med en uforklarlig fejl, på
writeObject, se nedenstående. Jeg syntes ikke google hjælper i dette
tilfælde.


Kode snip:
   private XMLEncoder e;
   private XMLDecoder d;
   
   public ConstructorClasse()
   {      
       try {
         e = new XMLEncoder(new BufferedOutputStream( new
FileOutputStream("Test.xml")));
      
      } catch (FileNotFoundException e1) {
         // TODO Auto-generated catch block
         e1.printStackTrace();
      }

      Operator op = new Operator("Borge Pedersen", 5, "bp");
       e.writeObject(op);
       e.close();
   }

Nogle forslag?

Mvh.
Søren
Sømand

 
 
Thorbjørn Ravn Ander~ (18-01-2007)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 18-01-07 18:41

Søren sømand <soren@sotoqxxx.dk> writes:

>       Operator op = new Operator("Borge Pedersen", 5, "bp");

Implementerer Operator Serializable?
--
Thorbjørn Ravn Andersen

Søren sømand (18-01-2007)
Kommentar
Fra : Søren sømand


Dato : 18-01-07 21:03

Jeps, og jeg har også testet med public/private for variablerne i objektet.
Tak for den hurtige response iøvrigt...
Mvh.
Søren


Den 18.01.2007 kl. 18:40:31 skrev "Thorbjørn Ravn Andersen"
<nospam0000@gmail.com>:

> Søren sømand <soren@sotoqxxx.dk> writes:
>
>>       Operator op = new Operator("Borge Pedersen", 5, "bp");
>
> Implementerer Operator Serializable?

Thorbjørn Ravn Ander~ (18-01-2007)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 18-01-07 22:38

Søren sømand <soren@sotoqxxx.dk> writes:

> Jeps, og jeg har også testet med public/private for variablerne i objektet.
> Tak for den hurtige response iøvrigt...

Komplet kodeeksempel, tak.
--
Thorbjørn Ravn Andersen

Andreas Plesner Jaco~ (18-01-2007)
Kommentar
Fra : Andreas Plesner Jaco~


Dato : 18-01-07 22:39

On 2007-01-18, Thorbjørn Ravn Andersen <nospam0000@gmail.com> wrote:
>
>> Jeps, og jeg har også testet med public/private for variablerne i objektet.
>> Tak for den hurtige response iøvrigt...
>
> Komplet kodeeksempel, tak.

....og fejltekst.

--
Andreas

Søren sømand (19-01-2007)
Kommentar
Fra : Søren sømand


Dato : 19-01-07 09:18

/// Kode:

import java.io.Serializable;
public class Operator implements Serializable
{
   private String name;
   private int iD;
   private String initials;
   
   public Operator(String name, int iD, String initials)
   {
      this.name = name;
      this.iD = iD;
      this.initials = initials;
   }
   public int getID() {
      return iD;
   }
   
   public String getInitials() {
      return initials;
   }
   
   public String getName() {
      return name;
   }
}

//// og

package connectTest;

import java.beans.*;
import java.io.*;
import java.util.ArrayList;
import dataObjects.Item;
import dataObjects.Operator;
import dataObjects.ProductBatch;
import dataObjects.ProductRecept;
import Interfaces.IDataProvider;

public class XMLDataProvider implements IDataProvider {

   private XMLEncoder e;
   private XMLDecoder d;
   private Operator op;
   private ProductBatch pb;
   
   public XMLDataProvider()
   {      
       try {
         e = new XMLEncoder(new BufferedOutputStream( new
FileOutputStream("Test.xml")));
      } catch (FileNotFoundException e1) {
         // TODO Auto-generated catch block
         e1.printStackTrace();
      }      
      op = new Operator("Borge Pedersen", 5, "bp");
       e.writeObject(op);
       e.close();
   }

   public Operator getOperator(int operatorNumber) {

      try {
         d = new XMLDecoder(new BufferedInputStream(new
FileInputStream("Test.xml")));
      } catch (FileNotFoundException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
      Operator op =(Operator) d.readObject();
      d.close();

      return op;
   }
}

/// Ovenstående kode kalder jeg med en Junit test

public class dataProvider extends TestCase {

   private IDataProvider idp;
   private int id = 5;
   private int batchNumber = 223;
   private String batchName = "Stalvand";
   private int quantity = 250;
   private ProductRecept proR;
   
   /**
    * @throws java.lang.Exception
    */
   protected void setUp() throws Exception {
      idp = new XMLDataProvider();   
      
   }

   public void testOpName ()
   {      
      Operator o = idp.getOperator(id);
      assertEquals(o.getID(), id);      
      assertEquals(o.getInitials(), "bp");
      assertEquals(o.getName(), "Borge Pedersen");      
   }



/// Eclipse strander i linien hvor den vil oprette new XMLDecoder med
denne fejl:

java.lang.InstantiationException: dataObjects.Operator
Continuing ...
java.lang.Exception: XMLEncoder: discarding statement
XMLEncoder.writeObject(Operator);
Continuing ...

/// Da jeg kommer fra Visual studio og C# har jeg ikke helt styr på
hvordan man får bedre fejlbeskrivelser ud af Eclipse...

Kunne denne serialisering evt. gøres anderledes end med
XMLEncoder/XMLDecoder?
Pft.
Søren

Arne Vajhøj (20-01-2007)
Kommentar
Fra : Arne Vajhøj


Dato : 20-01-07 02:35

Søren sømand wrote:
> import java.io.Serializable;
> public class Operator implements Serializable
> {
> private String name;
> private int iD;
> private String initials;
>
> public Operator(String name, int iD, String initials)
> {
> this.name = name;
> this.iD = iD;
> this.initials = initials;
> }
> public int getID() {
> return iD;
> }
>
> public String getInitials() {
> return initials;
> }
>
> public String getName() {
> return name;
> }
> }

> java.lang.InstantiationException: dataObjects.Operator
> Continuing ...
> java.lang.Exception: XMLEncoder: discarding statement
> XMLEncoder.writeObject(Operator);

Tilføj en constructor uden argumenter, så tror jeg at fejlen
forsvinder.

Og hvis du tilføjer set metoder, så vil koden måske endda
også virke.

> Da jeg kommer fra Visual studio og C# har jeg ikke helt styr på
> hvordan man får bedre fejlbeskrivelser ud af Eclipse...

Det er en fejl fra XMLEncoder ikke fra Eclipse.

> Kunne denne serialisering evt. gøres anderledes end med
> XMLEncoder/XMLDecoder?

Der er mange muligheder, men XMLEncoder bør du kunne få til
at virke.

mvh/Arne

Søren sømand (20-01-2007)
Kommentar
Fra : Søren sømand


Dato : 20-01-07 21:45

Arne er "The Man"
Det er selvfølgelig den tomme konstruktør der mangler...Tak for det.
Visual studio plejer selv at brokke sig over at den mangler, så jeg havde
helt overset den mulighed her i java.
Setter'ne har jeg set, men de røg i svinget i et forsøg på fejlfinding.
Mvh.
Søren





Den 20.01.2007 kl. 02:35:03 skrev Arne Vajhøj <arne@vajhoej.dk>:

> Søren sømand wrote:
>> import java.io.Serializable;
>> public class Operator implements Serializable
>> {
>> private String name;
>> private int iD;
>> private String initials;
>> public Operator(String name, int iD, String initials)
>> {
>> this.name = name;
>> this.iD = iD;
>> this.initials = initials;
>> }
>> public int getID() {
>> return iD;
>> }
>> public String getInitials() {
>> return initials;
>> }
>> public String getName() {
>> return name;
>> }
>> }
>
>> java.lang.InstantiationException: dataObjects.Operator
>> Continuing ...
>> java.lang.Exception: XMLEncoder: discarding statement
>> XMLEncoder.writeObject(Operator);
>
> Tilføj en constructor uden argumenter, så tror jeg at fejlen
> forsvinder.
>
> Og hvis du tilføjer set metoder, så vil koden måske endda
> også virke.
>
>> Da jeg kommer fra Visual studio og C# har jeg ikke helt styr på hvordan
>> man får bedre fejlbeskrivelser ud af Eclipse...
>
> Det er en fejl fra XMLEncoder ikke fra Eclipse.
>
>> Kunne denne serialisering evt. gøres anderledes end med
>> XMLEncoder/XMLDecoder?
>
> Der er mange muligheder, men XMLEncoder bør du kunne få til
> at virke.
>
> mvh/Arne



--
Sendt med Operas banebrydende postklient: http://www.opera.com/mail/

Soren (19-01-2007)
Kommentar
Fra : Soren


Dato : 19-01-07 13:51

[snip]
> Kunne denne serialisering evt. gøres anderledes end med
> XMLEncoder/XMLDecoder?

Du kunne måske bruge xstream:
http://xstream.codehaus.org/tutorial.html

Mvh,
Søren


Søren sømand (20-01-2007)
Kommentar
Fra : Søren sømand


Dato : 20-01-07 21:47

Jeg så godt eksisten af dem på google, men det er et skole-projekt, så der
er grænser for hvor meget jeg kan "låne".
Men tak anyhow.
- Søren



Den 19.01.2007 kl. 13:50:55 skrev Soren <sorend@gmail.com>:

> [snip]
>> Kunne denne serialisering evt. gøres anderledes end med
>> XMLEncoder/XMLDecoder?
>
> Du kunne måske bruge xstream:
> http://xstream.codehaus.org/tutorial.html
>
> Mvh,
> Søren
>



--
Sendt med Operas banebrydende postklient: http://www.opera.com/mail/

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste