Richard, I added this to our Wiki so that everyone can view/edit/comment as well. See http://nagoya.apache.org/wiki/apachewiki.cgi?AxisProjectPages/DotNetInterop
Thanks, dims --- "Kellogg, Richard" <[EMAIL PROTECTED]> wrote: > Well gang. I have added a few new details and added comments provided by Steve. If >you have > anything to add please send it on. > If this looks complete I will try and submit it as a HTML document for addition to >CVS. > > Thanks, > Rick Kellogg > > Interoperability Notes on Apache Axis 1.1 Beta and Microsoft .NET Framework 1.0 FAQ > Last Updated: Feb-06-2003 > > 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, and double. > You can also create typed arrays of any of the above. Standard Sun JavaBeans > (http://java.sun.com/products/javabeans) and arrays > of JavaBeans are supported as well. > > Q: What about transferring java.util.Calendar values? > A: There are known problems with serializing/deserializing Calendar objects. Under >Java, the > Calendar object includes timezone > information. Under .NET, the System.DateTime value object does not contain >timezone > information. The .NET Framework assumes its > timezone is the current timezone when serializing and ignores it when >deserializing. As a > result, values can be off by +/- 24 hours. > > Two possible work arounds are the use of a string or wrapper value object. When >transmitting > time values, a long is recommended. > > Q: Can you provide mappings for Java datatypes to their equivalents under .NET? > A: Java C#.NET VB.NET .NET Framework Type > String string String System.String > boolean bool Boolean System.Boolean > byte sbyte -N/A- System.SByte > short short Decimal System.Int16 > int int Integer System.Int32 > long long Long System.Int64 > float float Single System.Single > double double Double System.Double > > 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. > * 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: How does one go about transmitting attachments between Java and the Microsoft >.NET 1.0 > Framework? > A: The basic .NET Framework 1.0 does not provide any support for attachments. > > The recent Microsoft Web Services Enhancements (WSE) 1.0 does add support for >DIME (Direct > Internet Message Encapsulation). > Please note there has been no indication from Microsoft concerning whether WSE >will be > included in the upcoming .NET Framework 1.1. > As a result, DIME support would require the installation on WSE on client >machines. > > Axis does support both MIME and DIME attachments. > > Q: Is it possible to compress a message using something like GZIP? > A: Unfortunately at this time no. > > 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); > } > } > > > Interoperability Notes on Apache Axis 1.1 Beta and Microsoft .NET Framework 1.0 FAQ > Last Updated: Feb-06-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, and double. > You can also create typed arrays of any of the above. Standard Sun JavaBeans > (http://java.sun.com/products/javabeans) and arrays > of JavaBeans are supported as well. > > Q: What about transferring java.util.Calendar values? > A: There are known problems with serializing/deserializing Calendar objects. Under >Java, the > Calendar object includes timezone > information. Under .NET, the System.DateTime value object does not contain >timezone > information. The .NET Framework assumes its > timezone is the current timezone when serializing and ignores it when >deserializing. As a > result, values can be off by +/- 24 hours. > > Two possible work arounds are the use of a string or wrapper value object. When >transmitting > time values, a long is recommended. > > Q: Can you provide mappings for Java datatypes to their equivalents under .NET? > A: Java C#.NET VB.NET .NET Framework Type > String string String System.String > boolean bool Boolean System.Boolean > byte sbyte -N/A- System.SByte > short short Decimal System.Int16 > int int Integer System.Int32 > long long Long System.Int64 > float float Single System.Single > double double Double System.Double > > 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. > * 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: How does one go about transmitting attachments between Java and the Microsoft >.NET 1.0 > Framework? > A: The basic .NET Framework 1.0 does not provide any support for attachments. > > The recent Microsoft Web Services Enhancements (WSE) 1.0 does add support for >DIME (Direct > Internet Message Encapsulation). > Please note there has been no indication from Microsoft concerning whether WSE >will be > included in the upcoming .NET Framework 1.1. > As a result, DIME support would require the installation on WSE on client >machines. > > Axis does support both MIME and DIME attachments. > > Q: Is it possible to compress a message using something like GZIP? > A: Unfortunately at this time no. > > 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); > } > } > > > ===== Davanum Srinivas - http://webservices.apache.org/~dims/ __________________________________________________ Do you Yahoo!? Yahoo! Mail Plus - Powerful. Affordable. Sign up now. http://mailplus.yahoo.com
