You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "Kellogg, Richard" <RK...@MICROS.COM> on 2003/02/06 14:57:56 UTC

Revised Interoperability between Axis 1.1 Beta and Microsoft .NET Framework 1.0 FAQ

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);
      }
   }


Re: Revised Interoperability between Axis 1.1 Beta and Microsoft .NET Framework 1.0 FAQ

Posted by Davanum Srinivas <di...@yahoo.com>.
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" <RK...@MICROS.COM> 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 (rkellogg@micros.com)
> 
> 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