- The BeanSerializer/Deserializer is designed to work with Bean getter/setter methods, not static constants
- You seem to want a class on the client that has final constants, but also want those values transported across the wire from your server instantiation of the ComplexObject class to the client and then set based on the response message's return value? Those two requirements are contradictory. - SOAP is a heterogeneous / generic message transport protocol, not JAVA RMI. - Based on the statement that you are using the BeanDeserializer and/or that you are trying to avoid writing your own deserializer, that leads me to believe that you do have some level of control over the client code. In that case, if you really want final string constants on the client, then why not just use your ComplexObject implementation there that already has those final string constants, and not use the auto-generated code from the WSDL? -----Original Message----- From: Liviu Chiriac [mailto:[EMAIL PROTECTED]] Sent: Thursday, February 06, 2003 4:32 PM To: [EMAIL PROTECTED] Cc: 'Mike Burati' Subject: RE: how to serialize/deserialize static final fields I am using the BeanDeserializer. I am just trying to avoid to have to write my own deserializer. I think the BeanSerializer should serialize my constants because otherwise the client does NOT get them. (as far as I can conclude from my testing...) If I write go with the interface as you said, the BeanDeserializer will create setters/getters for the non-final Strings in the ComplexObject, right? And then the client can even change their values on the client side ?! Liviu -----Original Message----- From: Mike Burati [mailto:[EMAIL PROTECTED]] Sent: Thursday, February 06, 2003 4:07 PM To: 'Liviu Chiriac'; [EMAIL PROTECTED] Subject: RE: how to serialize/deserialize static final fields Ah, mistakenly thought you were in control of the client too and either using a custom deserializer or trying to map your ComplexObject class via a BeanDeserializer... Using code generated from WSDL is another story altogether... You could add another method which returns a list of valid names that the client can call, but that's adding the overhead of another operation... If "final" turns out to be the only blocker, then you could try defining the final string constants in another class (eg, a Java Interface StringConstants class) and have your class implement that constants interface and then have non-final Strings that map to the constants. ..Mike -----Original Message----- From: Liviu Chiriac [mailto:[EMAIL PROTECTED]] Sent: Thursday, February 06, 2003 4:01 PM To: [EMAIL PROTECTED] Cc: 'Mike Burati' Subject: RE: how to serialize/deserialize static final fields No, they are not going to be the same on both ends. >From what I gather: The client creates its class using the WSDL. Because these constants do not get serialized, they are not mentioned in WSDL. Since they are never mentioned in the WDSL, the client creates a class without them The client does not have the same class I am using on the server. So ... If I expect him to set something (like the 'name' in my example) to one of these constants, he can't because he does not have them. Liviu -----Original Message----- From: Mike Burati [mailto:[EMAIL PROTECTED]] Sent: Thursday, February 06, 2003 3:29 PM To: '[EMAIL PROTECTED]' Subject: RE: how to serialize/deserialize static final fields You lost me - if you're using the ComplexObject class on both ends of the connection and those string constants are final, then why would you ever want them serialized/sent/deserialized? They're gonna be the same on both ends of the connection anyway? -----Original Message----- From: Liviu Chiriac [mailto:[EMAIL PROTECTED]] Sent: Thursday, February 06, 2003 2:59 PM To: [EMAIL PROTECTED] Subject: RE: how to serialize/deserialize static final fields Even if they are not 'static' and only 'final' .... it does not work!! Liviu -----Original Message----- From: Zhaohua Meng [mailto:[EMAIL PROTECTED]] Sent: Thursday, February 06, 2003 2:04 PM To: [EMAIL PROTECTED] Subject: Re: how to serialize/deserialize static final fields By definition static variables are not serializable. You need to write your own se/deserializer. I am trying to figure out a way to do the same thing to my application. Once figured out, I will drop some lines here. Liviu Chiriac wrote: > > > Say that I have a Web Service that sends the client a ComplexObject. The > client needs to return it back after setting its name to either > ComplexObject.NAME1, ComplexObject.NAME2 or ComplexObject.NAME3 (static > final fields - constants) > > > > The problem is that the static final fields never get > serialized/deserialized by the BeanSerializer. > > > > Is this a bug, or intended behavior? If intended behavior, what is an > elegant way of doing it? > > > > -------------------------------------- > > public class ComplexObject implements java.io.Serializable { > > public static final String NAME1 = "name1"; > > public static final String NAME2 = "name2"; > > public static final String NAME3 = "name3"; > > > > private name; > > public void setName(String s) { > > name = s; > > } > > public String getName() { > > return name; > > } > > } > > -------------------------------------- > > >