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. Thanks, 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 ([EMAIL PROTECTED]) 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 (http://java.sun.com/products/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 used? 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) iter.next(); 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); } }
