EJB3 Session bean perikelen

Niets is zo frustrerend als een foutmelding tijdens het programmeren. Nog frustrerender wordt het als de fout je ook nog eens niets zegt. Nog frustrerender wordt het als collega’s en kennissen je ook niet verder kunnen helpen en zelf ook met een mond vol tanden staan.Dit overkwam mij tijdens de bouwfase van mijn project. Na een paar heel productieve bouw en testdagen kreeg ik ineens de volgende foutmelding op het scherm :

  <env:Body>
  <env:Fault>
   <faultcode>env:Server</faultcode>
    <faultstring>Internal Server Error (serialization error: no serializer is
registered for (class nl.gvb.vervoer.publicaties.cm.LijnbasisCM,
null))</faultstring>
  </env:Fault>
 </env:Body>
</env:Envelope>

Zo kijkend naar de implementatie van het object LijnbasisCM blijkt ook niets geks zo 1 2 3.

package nl.gvb.vervoer.publicaties.cm;

public class LijnbasisCM {
    public LijnbasisCM() {}
    public String identificatie;
    public String vervoertype;
    public String eigenaar;
    public String lijntype;
    public String zonenummer;
    public String richting;
}

Ook de klasse waar dit object in wordt gebruikt ziet er niet echt raar uit :

package nl.gvb.vervoer.publicaties.cm;

import java.util.List;

public class OverstapgegevensCM{
    public OverstapgegevensCM() {}

    public List<LijnbasisCM> lijnen;
    public String referentiepuntCode;
    public OverstaprelatieCM overstaprelatie;
}

En om het nog gekker te maken, het LijnBasis object wordt ook al in andere session beans gebruikt waar hij wel gewoon werkt. Maar waarom dan niet in deze context?

De gegenereerde WSDL ziet er ook raar uit

 <complexType  name="HaltelijngegevensCM">
<sequence>
<element name="lijnen" type="ns1:list"  nillable="true" />
</sequence>
</complexType>

Een andere lijst van objecten ( die wel werkt ) ziet er zo uit.

<complexType name="ListOfAbriCM">
<sequence>
<element  name="item" type="tns:AbriCM" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>

Waarom werkt de AbriCM list wel en waarom werkt de LijnBasis list niet?

De oplossing was zoals elke oplossing zoals gewoonlijk weer eens veel te simpel. En werd ook zoals gewoonlijk toevallig gevonden. Tijdens het schrijven van een eigen serializer en deserializer voor mijn objecten had ik in mijn voorbeeld project alle variabelen in mijn klassen private gemaakt en getters en setters gegenereerd. De code getest en het werkte.

Daarna getest door de custom-type-mappings.xml aan te passen en expres een foute serializer class opgegeven. En gek.. He werkt nog steeds!

Uiteindelijk dus het gehele model voorzien van getters, setters en private declaraties voor alle variabelen. De LijnbasisCM klasse ziet er nu als volgt uit :

package nl.gvb.vervoer.publicaties.cm;
public class LijnbasisCM {
    public LijnbasisCM() {}
    private String identificatie;
    private String vervoertype;
    private String eigenaar;
    private String lijntype;
    private String zonenummer;
    private String richting;
    public void setIdentificatie(String identificatie) {
        this.identificatie = identificatie;
    }
    public String getIdentificatie() {
        return identificatie;
    }
    public void setVervoertype(String vervoertype) {
        this.vervoertype = vervoertype;
    }
    public String getVervoertype() {
        return vervoertype;
    }
    public void setEigenaar(String eigenaar) {
        this.eigenaar = eigenaar;
    }
    public String getEigenaar() {
        return eigenaar;
    }
    public void setLijntype(String lijntype) {
        this.lijntype = lijntype;
    }
    public String getLijntype() {
        return lijntype;
    }
    public void setZonenummer(String zonenummer) {
        this.zonenummer = zonenummer;
    }
    public String getZonenummer() {
        return zonenummer;
    }
    public void setRichting(String richting) {
        this.richting = richting;
    }
    public String getRichting() {
        return richting;
    }
}

Dit doorgevoerd in alle model objecten ET VOILA! het werkt!

Blijft de vraag staan, waarom werkt het half met public gedeclareerde variabelen zonder getters en setters?

Tags: , , , ,

Reageren

U moet inloggen om te reageren.