axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Thomas Börkel ...@ap-ag.com>
Subject RE: Urgent interop problem with .NET if String parameter is null -> big problem
Date Thu, 21 Mar 2002 16:20:42 GMT
HI!

Yes, I know that we have the parameter names during WSDL generation, but not during a method
call.

I don't think, I can wait until the description code is ready, unless it's next week or so.
;-)

So, maybe I will provide some hack in the meantime.

Regards,
Thomas

> -----Original Message-----
> From: Tom Jordahl [mailto:tomj@macromedia.com]
> Sent: Donnerstag, 21. März 2002 17:11
> To: 'axis-dev@xml.apache.org'
> Subject: RE: Urgent interop problem with .NET if String parameter is
> null -> big problem
> 
> 
> 
> 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:tb@ap-ag.com]
> Sent: Thursday, March 21, 2002 10:45 AM
> To: axis-dev@xml.apache.org
> 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:tomj@macromedia.com]
> > Sent: Donnerstag, 21. März 2002 16:25
> > To: 'axis-dev@xml.apache.org'
> > 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:tb@ap-ag.com]
> > Sent: Thursday, March 21, 2002 9:00 AM
> > To: axis-dev@xml.apache.org
> > 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: axis-dev@xml.apache.org
> > > 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
> > > > 
> > > > 
> > > 
> > 
> 

Mime
View raw message