You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by ch...@netscape.net on 2004/01/27 17:04:12 UTC

How does using Interface for mapping object-to-xml works in Betwixt?

I seems to have different result when i map an object-to-xml  using an object instance as compared to that of an interface.
 
The scenario is as such:
I have a Person class which implements an interface PersonIntf and when this object is mapped into xml using the Person instance, i have the following result  
  <person age="21" name="John Smith">
      <address street1="Street1" postalcode="12345"/>
  </person>

but when i used the same Person object instance but now using the PersonIntf via the XMLInspector.setClassNormalizer() i have the following result - the <address> element info are all missing
  <person age="21" name="John Smith">
      <address street1="" postalcode=""/>  <!-- street1 & postalcode not being mapped -->
  </person>

Did i missed something here? I suspect that the XMLIntrospector did not include the super interface of PersonIntf => AddressIntf, am i right?

I have all my classes listed below, i am using the nightly build downloaded last night.

Any help will be greatly appreciated. Thanks in advance

===Address Interface Class ===
public interface AddressIntf {
    public String getStreet1();    
    public int getPostalcode(); 
    public void setStreet1(String st);
    public void setPostalcode(int pc);
    
    //convenience method
    public void setAddress(String st, int pc);
    
}

===Person Interface Class===
public interface PersonIntf extends AddressIntf{
    public String getName();
    public int getAge();
    public void setName(String name);
    public void setAge(int age);
    
    //derive attr
    public AddressIntf getAddress();  
}

===Person Class===
public class Person implements PersonIntf {
    private String name;
    private int age;
    private Address address;
    
    public Person() {address = new Address();}
    
    public Person(String name, int age) {
       this(name, age, null, 0);
    }
    
    public Person(String name, int age, String street1, int postalcode){
        this.name = name;
        this.age = age;
        this.address = new Address(street1, postalcode);
    }
    
    public String getName() { return name;}
    public void setName(String name) {this.name = name;}
    
    public int getAge() {return age;}
    public void setAge(int age) {this.age = age;}
        
    public AddressIntf getAddress() {return address;}
    public void setAddress(Address address) {this.address=address;}
    public void setAddress(String st, int pc) {address.setAddress(st, pc);}
    
    public String getStreet1(){ return address.getStreet1();}
    public void setStreet1(String st){ address.setStreet1(st);}
    
    public int getPostalcode(){ return address.getPostalcode();}
    public void setPostalcode(int pc){address.setPostalcode(pc);}
    
    public String toString() {return "PersonBean[name='" + name + "',age='" + age + ", address[" + address +"']";}
    
    private class Address implements AddressIntf {
        private String street1;
        private int postalcode;
        
        /** Creates a new instance of Name */
        public Address() {}
        
        public Address(String street1, int postalcode){
            this.street1=street1;
            this.postalcode=postalcode;
        }
        
        public String getStreet1() {return street1;}
        public void setStreet1(String street1) {this.street1 = street1;}
        
        public int getPostalcode() {return postalcode;}
        
        public void setPostalcode(int postalcode) {this.postalcode = postalcode;}
        
        public void setAddress(String street1, int postalcode){
            this.street1=street1;
            this.postalcode=postalcode;
        }
        
        public String toString(){return "street1="+street1+", postalcode="+postalcode;}
        
    }
}



__________________________________________________________________
New! Unlimited Netscape Internet Service.
Only $9.95 a month -- Sign up today at http://isp.netscape.com/register
Act now to get a personalized email address!

Netscape. Just the Net You Need.

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org


Re: How does using Interface for mapping object-to-xml works in Betwixt?

Posted by robert burrell donkin <ro...@blueyonder.co.uk>.
hi

i've set up some tests using the source provided but i'm afraid to say 
that i don't seem to be able to reproduce your problem.

i suspect that your using some .betwixt files and maybe there's a 
problem somewhere there.

could you either post you .betwixt files or (even better) a unit test 
that i can run and demonstrates the problem.

- robert

On 27 Jan 2004, at 16:04, cheongco@netscape.net wrote:

> I seems to have different result when i map an object-to-xml  using an 
> object instance as compared to that of an interface.
>
> The scenario is as such:
> I have a Person class which implements an interface PersonIntf and 
> when this object is mapped into xml using the Person instance, i have 
> the following result
>   <person age="21" name="John Smith">
>       <address street1="Street1" postalcode="12345"/>
>   </person>
>
> but when i used the same Person object instance but now using the 
> PersonIntf via the XMLInspector.setClassNormalizer() i have the 
> following result - the <address> element info are all missing
>   <person age="21" name="John Smith">
>       <address street1="" postalcode=""/>  <!-- street1 & postalcode 
> not being mapped -->
>   </person>
>
> Did i missed something here? I suspect that the XMLIntrospector did 
> not include the super interface of PersonIntf => AddressIntf, am i 
> right?
>
> I have all my classes listed below, i am using the nightly build 
> downloaded last night.
>
> Any help will be greatly appreciated. Thanks in advance
>
> ===Address Interface Class ===
> public interface AddressIntf {
>     public String getStreet1();
>     public int getPostalcode();
>     public void setStreet1(String st);
>     public void setPostalcode(int pc);
>
>     //convenience method
>     public void setAddress(String st, int pc);
>
> }
>
> ===Person Interface Class===
> public interface PersonIntf extends AddressIntf{
>     public String getName();
>     public int getAge();
>     public void setName(String name);
>     public void setAge(int age);
>
>     //derive attr
>     public AddressIntf getAddress();
> }
>
> ===Person Class===
> public class Person implements PersonIntf {
>     private String name;
>     private int age;
>     private Address address;
>
>     public Person() {address = new Address();}
>
>     public Person(String name, int age) {
>        this(name, age, null, 0);
>     }
>
>     public Person(String name, int age, String street1, int 
> postalcode){
>         this.name = name;
>         this.age = age;
>         this.address = new Address(street1, postalcode);
>     }
>
>     public String getName() { return name;}
>     public void setName(String name) {this.name = name;}
>
>     public int getAge() {return age;}
>     public void setAge(int age) {this.age = age;}
>
>     public AddressIntf getAddress() {return address;}
>     public void setAddress(Address address) {this.address=address;}
>     public void setAddress(String st, int pc) {address.setAddress(st, 
> pc);}
>
>     public String getStreet1(){ return address.getStreet1();}
>     public void setStreet1(String st){ address.setStreet1(st);}
>
>     public int getPostalcode(){ return address.getPostalcode();}
>     public void setPostalcode(int pc){address.setPostalcode(pc);}
>
>     public String toString() {return "PersonBean[name='" + name + 
> "',age='" + age + ", address[" + address +"']";}
>
>     private class Address implements AddressIntf {
>         private String street1;
>         private int postalcode;
>
>         /** Creates a new instance of Name */
>         public Address() {}
>
>         public Address(String street1, int postalcode){
>             this.street1=street1;
>             this.postalcode=postalcode;
>         }
>
>         public String getStreet1() {return street1;}
>         public void setStreet1(String street1) {this.street1 = 
> street1;}
>
>         public int getPostalcode() {return postalcode;}
>
>         public void setPostalcode(int postalcode) {this.postalcode = 
> postalcode;}
>
>         public void setAddress(String street1, int postalcode){
>             this.street1=street1;
>             this.postalcode=postalcode;
>         }
>
>         public String toString(){return "street1="+street1+", 
> postalcode="+postalcode;}
>
>     }
> }
>
>
>
> __________________________________________________________________
> New! Unlimited Netscape Internet Service.
> Only $9.95 a month -- Sign up today at http://isp.netscape.com/register
> Act now to get a personalized email address!
>
> Netscape. Just the Net You Need.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-user-help@jakarta.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org