Hi Richard!

Thanks for the great work.  Some comments below:

> 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.

I'm not sure what you mean here.  The Java wrapper classes work fine, they'll just be 
converted on the wire to their XML equivalents (either SOAP-ENC:int or xsd:int, for 
instance)....

> Q: What datatypes or design patterns should I avoid when 
> seeking maximum interoperability?
> A: You should avoid the following constructs:
>       * Standard Java Collection classes.

Why?  Java Collections serialize to/from SOAP arrays.

>       * Typesafe enumerations.  Use static final variables 
> within Java instead.

You should give an example here.

>       * Multi-dimensional and jagged arrays.

Multi-dimensional arrays work fine AFAIK.

>       * 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.

This would be better phrased "is there built-in support for...".  People are of course 
welcome to write an Axis Handler and a .NET thingy ("filter"?) to do it themselves.

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

Reply via email to