On Mon, Jun 10, 2002 at 02:59:23PM -0400, David Ward wrote:
> Dr. Jung,
> 
> True that it requires a java (jdk 1.4) server and client, but if you 
> know and can accept that (and that's probably most of us)...
If this is true, why not user RMI instead? I only use is for M$ clients.


> 
> Actually, it handles complex graphs quite nicely.  Here's an example 
> java file:
> 
> import java.beans.XMLEncoder;
> import java.io.*;
> import java.util.*;
> import javax.swing.*;
> 
> public class EncTest {
> 
>       public static void main(String[] args) throws Exception {
>               Map m = new HashMap();
>               m.put("jbutton",  new JButton("hello") );
>               m.put("string", "foobar");
>               List list = new ArrayList();
>               list.add("one");
>               list.add( new Integer(2) );
>               m.put("list", list);
>               XMLEncoder enc = new XMLEncoder(new FileOutputStream("output.xml"));
>               enc.writeObject(m);
>               enc.close();
>       }
> 
> }
> 
> and here is the output it created:
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <java version="1.4.0_01" class="java.beans.XMLDecoder">
>   <object class="java.util.HashMap">
>    <void method="put">
>     <string>list</string>
>     <object class="java.util.ArrayList">
>      <void method="add">
>       <string>one</string>
>      </void>
>      <void method="add">
>       <int>2</int>
>      </void>
>     </object>
>    </void>
>    <void method="put">
>     <string>jbutton</string>
>     <object class="javax.swing.JButton">
>      <void property="actionCommand">
>       <string>hello</string>
>      </void>
>      <void property="label">
>       <string>hello</string>
>      </void>
>      <void property="model">
>       <void property="actionCommand">
>        <null/>
>       </void>
>      </void>
>     </object>
>    </void>
>    <void method="put">
>     <string>string</string>
>     <string>foobar</string>
>    </void>
>   </object>
> </java>
> 
> The only 2 problems that this output created for me are:
> 1) I needed to strip off the xml declartation (easy).
> 2) I needed to wrap everything in a CDATA section (easy).
> 
> Here is the pertinant code that puts it all together:
> 
> // implements Serializer
> public void serialize(QName pQName, Attributes pAttributes,
>                        Object pValue, SerializationContext pContext)
>       throws IOException
> {
>       pContext.startElement(pQName, pAttributes);
>       ByteArrayOutputStream baos = new ByteArrayOutputStream();
>       XMLEncoder enc = new XMLEncoder(baos);
>       enc.writeObject(pValue);
>       enc.close();
>       String data = baos.toString().trim();
>       // strip off the xml declaration and encapsulate as CDATA
>       data = "<![CDATA[" + data.substring( (data.indexOf('>') + 1), 
> data.length() ) + "]]>";
>       pContext.writeString(data);
>       pContext.endElement();
> }
> 
> //extends SimpleDeserializer
> public Object makeValue(String pSource)
> {
>       ByteArrayInputStream bais =
>               new ByteArrayInputStream( pSource.getBytes() );
>       XMLDecoder dec = new XMLDecoder( new BufferedInputStream(bais) );
>       Object data = dec.readObject();
>       dec.close();
>       return data;
> }
> 
> Baically, I modeled this thing after the CalendarSerializer.java and 
> CalendarDeserializer.java that I found in axis cvs.  Premise is that if 
> you can encode/decode something to/from a single String value, it's 
> easy.  As long as I encapsulate XMLEncoder's output in a CDATA section, 
> it doesn't confuse the axis wsdl xml format.
> 
> Now what do you think?
> David
> 
> --
> 
> Jung , Dr. Christoph wrote:
> > Hi David,
> > 
> > Sounds good, but I fear it�s similar to serializing the class via xsd:binary
> > when it comes to attach a client that has no
> > JDK1.4 (thinking of m$ .net and others) ... 
> > 
> > How do you generate the corresponding wsdl? How does it handle polymorphism?
> > Is the XMLEncoder well-typed, i.e., does it use the namespace environment of
> > the embedding tag? How do you callback from the beans encoder into the Axis
> > serialization engine in case you get embedded complex values, attachements
> > and all that stuff?
> > 
> > I see that your solution is very elegant, but it�s a kind of dead-end when
> > serializing 
> > complex object graphs, isn�t it?
> > 
> > CGJ
> > 
> > -----Urspr�ngliche Nachricht-----
> > Von: David Ward [mailto:[EMAIL PROTECTED]] 
> > Gesendet: Montag, 10. Juni 2002 16:58
> > An: [EMAIL PROTECTED]
> > Betreff: Re: AW: [JBoss-user] IllegalArgumentException from jboss.net to
> > SLSB
> > 
> > 
> > Dr. Jung and others,
> > 
> > I came up with a way to generically and tolerantly serialize and 
> > deserialize any Object.
> > 
> > I use java.beans.XMLEndoder in a class that implements Serializer, and I 
> > use java.beans.XMLDecoder in a class that extends SimpleDeserializer.
> > 
> > Pros:
> > 1) It's reusable for any object, so you don't need to have a serializer 
> > and deserializer for each of your custom data types.
> > 2) It's tolerant of "gets without sets" and other problems that "strict 
> > javabean" encoders have.
> > 3) It comes with the JDK.
> > 4) It handles the Collection problem I talked about.  (Actually, I 
> > changed the type to java.util.List, but in my client-config.xml and 
> > web-service.xml, I have to have a typeMapping of the exact impl: in my 
> > case, ArrayList.)
> > 
> > Cons:
> > 1) It depends on JDK 1.4.
> > 2) It's a bit (can't quantify yet) slower.
> > 
> > If (the jboss team) wants to include it in their jboss.net codebase, I'd 
> > be happy to share it, though I'd have to check with my boss first. 
> > Still, with the description I gave I'm sure anyone could implement it 
> > (the operative code in each class is less between 6-10 lines!).
> > 
> > Thanks for all your help!
> > David
> > 
> > --
> > 
> > Jung , Dr. Christoph wrote:
> > 
> >>David,
> >>
> >>IMO, Collection is a particularily bad type to map XML-Schema to and 
> >>from in Axix. If you use an array or a vector, the automatic mapping 
> >>of Axis will however do something meaningful.
> >>
> >>I�m currently working on an additional annotation of the Java-methods 
> >>that will allow to specify the Xml-mapping used, such that a 
> >>Collection argument of return type can be mapped to typed arrays, 
> >>datasets and the like.
> >>
> >>CGJ
> >>
> >>
> >>-----Urspr�ngliche Nachricht-----
> >>Von: David Ward [mailto:[EMAIL PROTECTED]]
> >>Gesendet: Montag, 10. Juni 2002 09:29
> >>An: [EMAIL PROTECTED]
> >>Betreff: [JBoss-user] IllegalArgumentException from jboss.net to SLSB
> >>
> >>
> >>(JBoss 3.0.0 final, Sun Linux JDK 1.4.0_01.)
> >>
> >>I have an axis client hitting jboss.net, which in turn executes a
> >>stateless ejb of mine.
> >>
> >>When I make calls to a method of:
> >>
> >>public UserData addUser(UserData pOrigData, PersistenceLevel pLevel)
> >>
> >>I have no problem.  The problem comes when the first argument turns 
> >>into
> >>a Collection in another method:
> >>
> >>public Collection addUsers(Collection pOrigDatas, PersistenceLevel 
> >>pLevel).
> >>
> >>Not sure why the Collection is confusing things (causing an "argument
> >>type mismatch").  Here's my stack trace -
> >>
> >>Thanks for any and all help,
> >>David
> >>
> >>--
> >>
> >>      [java] java.lang.IllegalArgumentException: argument type 
> >>mismatch on object "$Proxy74", method name "addUsers", tried argument 
> >>types: [Ljava.lang.Object;,
> > 
> > com.dotech.gizzard.persistence.PersistenceLevel
> > 
> >>      [java]     at
> >>org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.j
> >>ava:13
> >>5)
> >>      [java]     at
> >>
> > 
> > org.apache.axis.encoding.DeserializationContextImpl.endElement(Deserializati
> > 
> >>onContextImpl.java:865)
> >>      [java]     at
> >>org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1528)
> >>      [java]     at 
> >>org.apache.crimson.parser.Parser2.content(Parser2.java:1779)
> >>      [java]     at
> >>org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1507)
> >>      [java]     at 
> >>org.apache.crimson.parser.Parser2.content(Parser2.java:1779)
> >>      [java]     at
> >>org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1507)
> >>      [java]     at
> >>org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:500)
> >>      [java]     at 
> >>org.apache.crimson.parser.Parser2.parse(Parser2.java:305)
> >>      [java]     at
> >>org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:442)
> >>      [java]     at javax.xml.parsers.SAXParser.parse(SAXParser.java:345)
> >>      [java]     at
> >>
> > 
> > org.apache.axis.encoding.DeserializationContextImpl.parse(DeserializationCon
> > 
> >>textImpl.java:201)
> >>      [java]     at
> >>org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:428)     [java] 
> >>     at
> >>org.apache.axis.client.Call.invoke(Call.java:1793)
> >>      [java]     at org.apache.axis.client.Call.invoke(Call.java:1594)
> >>      [java]     at org.apache.axis.client.Call.invoke(Call.java:1513)
> >>      [java]     at org.apache.axis.client.Call.invoke(Call.java:1093)
> >>      [java]     at
> >>
> > 
> > com.dotech.gizzard.persistence.axis.AXISPersistenceManagerFactory$1.invoke(A
> > 
> >>XISPersistenceManagerFactory.java:46)
> >>      [java]     at $Proxy0.addUsers(Unknown Source)
> >>      [java]     at
> >>com.dotech.gizzard.persistence.test.UserTest.addUsers(UserTest.java:66)
> >>      [java]     at
> >>com.dotech.gizzard.persistence.test.UserTest.main(UserTest.java:31)
> >>
> >>
> >>_______________________________________________________________
> >>
> >>Don't miss the 2002 Sprint PCS Application Developer's Conference 
> >>August 25-28 in Las Vegas - 
> >>http://devcon.sprintpcs.com/adp/index.cfm?source=osdntextlink
> >>
> >>_______________________________________________
> >>JBoss-user mailing list
> >>[EMAIL PROTECTED] 
> >>https://lists.sourceforge.net/lists/listinfo/jboss-user
> >>###########################################
> >>
> >>This message has been scanned by F-Secure Anti-Virus for Microsoft 
> >>Exchange. For more information, connect to http://www.F-Secure.com/
> >>
> >>_______________________________________________________________
> >>
> >>Don't miss the 2002 Sprint PCS Application Developer's Conference 
> >>August 25-28 in Las Vegas - 
> >>http://devcon.sprintpcs.com/adp/index.cfm?source
> >>_______________________________________________
> >>JBoss-user mailing list
> >>[EMAIL PROTECTED]
> >>https://lists.sourceforge.net/lists/listinfo/jboss-user
> > 
> > 
> > 
> > 
> 
> 
> 
> -- 
> 
> ---------------------
> David Ward
> [EMAIL PROTECTED]
> http://www.dotech.com
> 
> 
> _______________________________________________________________
> 
> Don't miss the 2002 Sprint PCS Application Developer's Conference
> August 25-28 in Las Vegas - http://devcon.sprintpcs.com/adp/index.cfm?source
> _______________________________________________
> JBoss-user mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/jboss-user

-- 
MVH
Marius Kotsbak
Boost communications AS

_______________________________________________________________

Don't miss the 2002 Sprint PCS Application Developer's Conference
August 25-28 in Las Vegas - 
http://devcon.sprintpcs.com/adp/index.cfm?source=osdntextlink

_______________________________________________
JBoss-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to