Interoperability Notes on Apache Axis 1.1 and Microsoft .NET Framework 1.0/1.1 FAQ
Q: What datatypes can be safely used between Java and the Microsoft .NET 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 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 class includes timezone information. Under .NET, the System.DateTime structure 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 of time in seconds (classic C time_t) is recommended.
Q: Can you provide mappings for Java datatypes to their equivalents under .NET?
A: Sure. {{{ Java C#.NET VB.NET .NET Framework Type
String string String [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemStringClassTopic.asp System.String] boolean bool Boolean [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemBooleanClassTopic.asp System.Boolean] byte sbyte -N/A- [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemSByteClassTopic.asp System.SByte] short short Decimal [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemInt16ClassTopic.asp System.Int16] int int Integer [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemInt32ClassTopic.asp System.Int32] long long Long [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemInt64ClassTopic.asp System.Int64] float float Single [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemSingleClassTopic.asp System.Single] double double Double [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDoubleClassTopic.asp 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# System.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.
- Sparse arrays (allowed in SOAP 1.1, not in SOAP 1.2).
- 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 Framework?
A: Both shipping versions of the .NET Framework 1.0 and 1.1 do NOT provide any support for attachments.
The recentMicrosoft Web Services Enhancements (WSE) does add support for [/Dime DIME (Direct Internet Message Encapsulation)]. As a result, DIME support requires the installation on WSE on client machines.
Axis does support both MIME and DIME attachments: the server handles either, the client needs to be told to use DIME when sending messages.
Q: Are there any requirements for using Axis withMicrosoft Web Services Enhancements (WSE)?
A: To use the WSE toolkit with Axis, you need to turn offWS-Routing.
This can be done by adding the following call:
_server.RequestSoapContext.Path.MustUnderstand = false;
Otherwise you get a MustUnderstand fault when Axis fails to understand the WS-Routing headers. For more info, see Java & .NET Interop - How To.
Q: Is there built in support for compressing messages using something like GZIP?
A: Unfortunately at this time no. In fact, the .NET Framework does not include a built in compression library.
{{{ Click on the following link for a discussion and potential work around to the issue:
http://marc.theaimsgroup.com/?l=axis-dev&m=106086909809576&w=2 It does appear GZIP compression support will be added in the .NET Framework 2.0. See the following article for more information:
[http://msdn.microsoft.com/netframework/archive/default.aspx?pull=/library/en-us/dnvs05/html/wsnetfx2.asp New Features for Web Service Developers in Beta 1 of the .NET Framework 2.0] }}}
Q: Are there any documented web service bugs in Microsoft .NET Framework?
A: Yes, within .NET 1.0 there is an issue with empty array deserialization described in the following article:
{{{ BUG: Incorrect Results Occur When a Web Service Returns an Array of Size 0
http://support.microsoft.com/default.aspx?scid=kb;en-us;330065 This bug has been corrected in the .NET 1.1 release. Starting with Axis 1.1RC2, you can place the following entry within your WSDD file to work around the issue:
{{{ <globalConfiguration>
<parameter name="axis.sendMinimizedElements" value="false"/>
</globalConfiguration> }}}
It is recommended that you only enable this option if you must support .NET 1.0 clients. }}}
Q: Can you provide a recommendation of how to transport a java.util.Map to C#? /DotNetInteropMapInfo
Q: Could someone please provide an example of JavaBean serialization and access from a C# or other .Net client? I am able to generate a C# client proxy from the Axis-generated WSDL (using wsdl.exe), but when using it, I get a System.InvalidOperationException when the proxy tries to unmarshall the response.
A: For a working bean example see: http://www.pankaj-k.net/axis4tag/ (this is a Java only example and not what was asked for) The .Net Framework 1.0 has a bug that results in this sort of error when empty arrays are deserialized on the client. http://support.microsoft.com/default.aspx?scid=kb;en-us;330065
Q: Is there a list of web service related changes made between the Microsoft .NET Framework 1.0 and 1.1?
A: Yes, See the following articles:
XML & Web Services Changes in .NET Framework 1.1
Changes in System.web.services from .NET Framework 1.0 to 1.1
Resources
MSDN Web Services Developer Center
West Wind Technologies White Papers
Q: Why sendNull parameter of the method "org.apache.axis.encoding.SerializationContextImpl.serialize" is hard code set to true ?
Remark: When you want to access to a Microsoft Web Services, the parameters with a Null value shouldn't be sent. I think it will be interesting to add a Tag in the client-config.wsdd to choose if we want to send <Parameter xsi:nil="true"/> in the SOAP envelope of the request.