axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kellogg, Richard" <RKell...@MICROS.COM>
Subject Interoperability between Axis 1.1 Beta and Microsoft .NET Framework 1.0
Date Wed, 05 Feb 2003 20:30:59 GMT
Gang could you review the following and correct any errors I might have made?  When completed
I would like this sort of information included in the Axis distribution.

Many thanks to Sam Ruby and Steve Loughran.

Rick Kellogg

Interoperability Notes on Apache Axis 1.1 Beta and Microsoft .NET Framework 1.0 FAQ
Last Updated: Feb-05-2003
Author: Rick Kellogg (

Q: What datatypes can be safely used between Java and the Microsoft .NET 1.0 Framework?
A: The following simple Java datatypes can be used: String, boolean, byte, short, int, long,
float, double and java.util.Calendar.
   You can also create arrays of any of the above.  Standard Sun JavaBeans (
and arrays of JavaBeans
   are supported as well.

Q: Can the standard Java primitive wrappers like java.lang.Integer or java.lang.Double be
A: Not directly.  Microsoft C# does not have an equivalent language feature.  You could work
around this by using the C# object datatype.

Q: What datatypes or design patterns should I avoid when seeking maximum interoperability?
A: You should avoid the following constructs:
      * Standard Java Collection classes.
      * Do not use unsigned numeric types in .NET languages. Java does not directly support
this feature.
      * Typesafe enumerations.  Use static final variables within Java instead.
      * Multi-dimensional and jagged arrays
      * The Java char datatype is not supported because of an omission in XML Schema.
      * Avoid using the same method name multiple times with varying parameters on a web service.

Q: Can you provide a recommendation of how to transport a java.util.Map to C#?
A: The easiest solution is to implement a typed array with a JavaBean.

   public class MapEntryVO
       private Object  key;
       private Object  value;

       public MapEntryVO()

       public MapEntryVO(String key, Object value)
           this.key   = key;
           this.value = value;

       public Object getKey()
           return key;
       public void setKey(Object value)
           key = value;

       public Object getValue()
           return value;
       public void setValue(Object value)
           this.value = value;


   import java.util.*;

   public class WebServicesUtils
       public static MapEntryVO[] convertMapToMapEntryVO(Map conv)
           MapEntryVO[] result = new MapEntryVO[conv.size()];
           int i = 0;
           Iterator iter = conv.entrySet().iterator();

           while (iter.hasNext())
	            Map.Entry item = (Map.Entry);
	            result[i++] = new MapEntryVO(item.getKey(),item.getValue());

           return result;

   // Example WebService
   public class TestService
      public MapEntryVO[] testMethod()
         java.util.Map value = new java.util.HashMap();

         value.put("Key 1","Value 1");
         value.put("Key 2","Value 2");

         return WebServicesUtils.convertMapToMapEntryVO(value);

View raw message