We already know the argument names (we need them for WSDL generation) and Glen is working on a Service/Operation description code that helps in this area because it allows you to more clearly specify the parameter names (specifically the XML element names) for each operation. Once we have this, we will not need to grunge through the byte code unless we have no other option.
This will go a long way to addressing the problem. -- Tom Jordahl Macromedia -----Original Message----- From: Thomas Börkel [mailto:[EMAIL PROTECTED]] Sent: Thursday, March 21, 2002 10:45 AM To: [EMAIL PROTECTED] Subject: RE: Urgent interop problem with .NET if String parameter is null -> big problem HI! It's not only a problem of overloaded methods. Consider this signature: myFunc(int i, String s1, String s2, int j) Now, if s1 OR s2 is missing, Axis can't determine which one is missing, because Axis does not have the parameters names at that time. I think, that's the main problem. OK, one possible (hack) fix comes to mind: Use tt-bytecode (we already have a cache for that in ClassRep, that probably should be more global) to find out the parameter names at runtime, if such a situation occurs. Problem is, this is a VERY expensive operation... One could also look at the WSDL, IF it's available at that time... So, if this is a known problem and there is no solution yet, then Axis can't interop with .NET, that's it. :-( If some solution comes to my mind, I'll implement and provide it. BTW, if .NET is the server and the client sends a NULL as xsi:nil="true", then .NET thinks this is "". On the other hand, if .NET is the client and gets xsi:nil="true" as return, then it recognizes it as NULL. So, .NET also has a problem in this field. Regards, Thomas > -----Original Message----- > From: Tom Jordahl [mailto:[EMAIL PROTECTED]] > Sent: Donnerstag, 21. März 2002 16:25 > To: '[EMAIL PROTECTED]' > Subject: RE: Urgent interop problem with .NET if String parameter is > null -> big problem > > > > What now? > > You will have to wait until someone implements the missing feature. > Or pitch in and implement it yourself. > > Omitting parameters is allowed by the spec, and .NET does it. :-( > > The trick is how do you dispatch the request to the correct operation > if you can't use the parameters of the operation to select > which method > to call? > > Example: > myFunc(int i, String foo); > myFunc(int i); > > If <foo> is missing from the XML, which function do you call? .NET > does it with SoapAction, which is different even for methods which are > overloaded. > > Glen Daniels is currently working on some much needed changes > that will clean up the way the Axis engine does operation > resolution. While this (probably) wont fix the problem right away, > it will lay the foundation for code that can do the search. > > -- > Tom Jordahl > Macromedia > > > -----Original Message----- > From: Thomas Börkel [mailto:[EMAIL PROTECTED]] > Sent: Thursday, March 21, 2002 9:00 AM > To: [EMAIL PROTECTED] > Subject: RE: Urgent interop problem with .NET if String parameter is > null -> big problem > > > OK, according to W3C, it is allowed to omit null parameters: > > From http://www.w3c.org/TR/2001/WD-soap12-part2-20011217/: > A NULL value or a default value MAY be represented by > omission of the accessor element. A NULL value MAY also be > indicated by an accessor element containing the attribute > xsi:nil with value "1 or true" or possibly other > application-dependent attributes and values. > > What now? > > > -----Original Message----- > > From: Thomas Börkel > > Sent: Donnerstag, 21. März 2002 11:30 > > To: [EMAIL PROTECTED] > > Subject: RE: Urgent interop problem with .NET if String parameter is > > null -> big problem > > > > > > > > Apparently, this is not a problem if the client is Axis, > > because Axis sends always all parameters and marks those > > which are null with xsi:nil="true". > > > > So, is this a bug of .NET or a missing feature in Axis? If it > > is no bug in .NET, because it's allowed to omit null > > parameters, then we have a big problem in Axis, I think, > > because Axis does not know the parameter names at runtime. > > > > > -----Original Message----- > > > From: Thomas Börkel > > > Sent: Mittwoch, 20. März 2002 15:27 > > > To: Axis Dev Mailinglist > > > Subject: Urgent interop problem with .NET if String > > parameter is null > > > > > > > > > HI! > > > > > > Consider the following method in a Java server: > > > > > > public String parameterTest(short s, int i, double d, > > > String t, boolean b) > > > > > > > > > Now, if .NET is the client and I call parameterTest(1, 2, > > > 3.5, null, true), then .NET does not pass in 't' at all. This > > > results in an error in Axis. > > > > > > This is the SOAP message from .NET for this: > > > > > > <?xml version="1.0" encoding="utf-8"?> > > > <soap:Envelope > > > xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" > > > xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" > > > xmlns:tns="http://p2test.p2plus.apag.com" > > > xmlns:types="http://p2test.p2plus.apag.com/encodedTypes" > > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > > xmlns:xsd="http://www.w3.org/2001/XMLSchema"> > > > <soap:Body > > > soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> > > > <tns:parameterTest> > > > <s xsi:type="xsd:short">1</s> > > > <i xsi:type="xsd:int">2</i> > > > <d xsi:type="xsd:double">3.5</d> > > > <b xsi:type="xsd:boolean">true</b> > > > </tns:parameterTest> > > > </soap:Body> > > > </soap:Envelope> > > > > > > > > > I am using Axis Beta1 and .NET 1.0. Anyone any ideas how to > > > get this to work? Is it .NET's fault? Then I'll file a bug > > > report to MS about this. > > > > > > Thanks! > > > > > > Regards, > > > Thomas > > > > > > > > >