You could use rpc/lit style. By this way there is not encoding or multiref. For doc/lit, I think SOAPAction could be use to identify method to call. But I don't know if Axis uses it. And in future, as i know, SOAPAction will be deprecated.
--- Andrea Tevoi > -----Original Message----- > From: Xia, Ge [mailto:[EMAIL PROTECTED]] > Sent: venerd� 7 febbraio 2003 1.47 > To: [EMAIL PROTECTED] > Subject: RE: If two methods have different names but same parameters, > the first one is always called. > > > Thank you very much for your reply. > > I did an experiment - I changed my service to rpc style and > both clients worked! Unfortunately my service needs to be > deployed as doc/lit style since we don't want encodings and > multi-refs in the xml messages. So my questions are: > > 1. In this scenario, is it true that for doc/lit services I > need to use different element names and different > messages(parts) in wsdl for each operation, since clients > cannot share the same message/part definition? It also means > I need to have different complexType definitions in the > schema? The result will be the new client will have two sets > of objects where one of them is not needed. > > 2. Any possibilities that Axis will support this in doc/lit > services in the future? > > Thanks, > > -Ge > > > -----Original Message----- > From: Tom Jordahl [mailto:[EMAIL PROTECTED]] > Sent: Thursday, February 06, 2003 11:19 AM > To: '[EMAIL PROTECTED]' > Subject: RE: If two methods have different names but same parameters, > the first one is always called. > > > > If the elements you are sending to a document style service > have exactly the same QName, then Axis will dispatch on this > QName and only one operation will be invoked. > > The operation name is not used in document/literal services. > This is what the rpc style is for - to wrap the arguments to > an operation in the operation name. > > If you have different element names, then you should be able > to configure the server .wsdd file with the element QName > that should go to each operation. i.e. myNS:newarg goes to > op1 and myNS:oldarg goes to op2. > > -- > Tom Jordahl > Macromedia Server Development > > -----Original Message----- > From: Xia, Ge [mailto:[EMAIL PROTECTED]] > Sent: Wednesday, February 05, 2003 12:54 PM > To: [EMAIL PROTECTED] > Subject: RE: If two methods have different names but same > parameters, the first one is always called. > > Sorry I didn't make it clear. I have one definition for each > element in the schema, but in each element complex type, the > last element ("extraElement") is not in the old client's > schema. In wsdl I am using the same part name for both operations. > > Here is the schema: > > <?xml version="1.0" encoding="UTF-8"?> > <xsd:schema > targetNamespace="http://axis.singleSignOn.knowmed.com/schema" > xmlns="http://axis.singleSignOn.knowmed.com/schema" > xmlns:xsd="http://www.w3.org/2001/XMLSchema" > xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" > xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" > elementFormDefault="qualified"> > <!-- Element names will be the tag names in xml message --> > <xsd:element name="PrepareSession" > type="PrepareSessionRequest"/> > <xsd:element name="PrepareSessionResponse" > type="PrepareSessionResponse"/> > <xsd:complexType name="PrepareSessionRequest"> > <xsd:all> > <xsd:element name="user" type="xsd:string"/> > <xsd:element name="organizationId" > type="xsd:string" nillable="true" minOccurs="0"/> > <xsd:element name="patient" > nillable="true" minOccurs="0"> > <xsd:complexType> > <xsd:all> > <xsd:element > name="idType" type="xsd:string" nillable="true" minOccurs="0"/> > <xsd:element > name="idValue" type="xsd:string" nillable="true" minOccurs="0"/> > </xsd:all> > </xsd:complexType> > </xsd:element> > <xsd:element name="visitDate" > type="xsd:date" nillable="true" minOccurs="0"/> > <!-- This element is only for new client --> > <xsd:element name="extraElement" > type="xsd:string" nillable="true" minOccurs="0"/> > </xsd:all> > </xsd:complexType> > <xsd:complexType name="PrepareSessionResponse"> > <xsd:all> > <xsd:element name="sessionId" > type="xsd:string"/> > <xsd:element name="browserCommandUrl" > type="xsd:string"/> > <!-- This element is only for new client --> > <xsd:element name="extraElement" > type="xsd:string" nillable="true" minOccurs="0"/> > </xsd:all> > </xsd:complexType> > </xsd:schema> > > And here is wsdl: > > <?xml version="1.0" encoding="UTF-8"?> > <wsdl:definitions xmlns="http://schemas.xmlsoap.org/wsdl/" > targetNamespace="http://axis.singleSignOn.knowmed.com" > xmlns:intf="http://axis.singleSignOn.knowmed.com" > xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" > xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" > xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" > xmlns:xsd="http://www.w3.org/2001/XMLSchema" > xmlns:xsd1="http://axis.singleSignOn.knowmed.com/schema"> > <import > namespace="http://axis.singleSignOn.knowmed.com/schema" > location="file:///c:/iknowmed/axis/schema/singleSignOn2.xsd"/> > <wsdl:message name="prepareSessionRequest"> > <wsdl:part name="prepareSessionReq" > element="xsd1:PrepareSession"/> > </wsdl:message> > <wsdl:message name="prepareSessionResponse"> > <wsdl:part name="prepareSessionResp" > element="xsd1:PrepareSessionResponse"/> > </wsdl:message> > > <wsdl:portType name="SingleSignOnServer"> > <wsdl:operation name="prepareSession"> > <wsdl:input > name="prepareSessionRequest" message="intf:prepareSessionRequest"/> > <wsdl:output > name="prepareSessionResponse" message="intf:prepareSessionResponse"/> > </wsdl:operation> > > <wsdl:operation name="prepareSession2"> > <wsdl:input > name="prepareSessionRequest" message="intf:prepareSessionRequest"/> > <wsdl:output > name="prepareSessionResponse" message="intf:prepareSessionResponse"/> > </wsdl:operation> > </wsdl:portType> > > <wsdl:binding name="SingleSignOnSoapBinding" > type="intf:SingleSignOnServer"> > <wsdlsoap:binding > transport="http://schemas.xmlsoap.org/soap/http" style="document"/> > > <wsdl:operation name="prepareSession"> > <wsdlsoap:operation > soapAction="http://axis.singleSignOn.knowmed.com" style="document"/> > <wsdl:input name="prepareSessionRequest"> > <wsdlsoap:body > namespace="http://axis.singleSignOn.knowmed.com" use="literal"/> > </wsdl:input> > <wsdl:output name="prepareSessionResponse"> > <wsdlsoap:body > namespace="http://axis.singleSignOn.knowmed.com" use="literal"/> > </wsdl:output> > </wsdl:operation> > > <wsdl:operation name="prepareSession2"> > <wsdlsoap:operation > soapAction="http://axis.singleSignOn.knowmed.com" style="document"/> > <wsdl:input name="prepareSessionRequest"> > <wsdlsoap:body > namespace="http://axis.singleSignOn.knowmed.com" use="literal"/> > </wsdl:input> > <wsdl:output name="prepareSessionResponse"> > <wsdlsoap:body > namespace="http://axis.singleSignOn.knowmed.com" use="literal"/> > </wsdl:output> > </wsdl:operation> > > </wsdl:binding> > <wsdl:service name="SingleSignOnService"> > <wsdl:port > binding="intf:SingleSignOnSoapBinding" name="SingleSignOn"> > <wsdlsoap:address > location="http://10.7.206.32:8081/axis/services/SingleSignOn"/> > </wsdl:port> > </wsdl:service> > </wsdl:definitions> > > > > -----Original Message----- > From: Glen Daniels [mailto:[EMAIL PROTECTED]] > Sent: Tuesday, February 04, 2003 8:57 PM > To: '[EMAIL PROTECTED]' > Subject: RE: If two methods have different names but same parameters, > the first one is always called. > > > > What do your types/parts look like? You can't have multiple > definitions for the same element in schema, so I'm not quite > sure how you'd express what you're talking about (i.e. one > method which takes the "old" version and another which takes > the "new"). > > --Glen > > > -----Original Message----- > > From: Xia, Ge [mailto:[EMAIL PROTECTED]] > > Sent: Tuesday, February 04, 2003 6:02 PM > > To: [EMAIL PROTECTED] > > Subject: If two methods have different names but same > parameters, the > > first one is always called. > > > > > > I am using axis beta 1.1. My old document style service has a > > method: outObject method1(inObject in); > > I use WSDL2Java tool to generate the server side classes. > > Everything is working fine. > > > > Now I need to add an extra element to both inObject and > > outObject(in the type definition in wsdl) and create a new > > service method: outObject method2(inObject in); for a new > > client to use, but I don't want to break the client who has > > the old type definitions and who is still calling method1. > > > > The two operations are defined in wsdl in this order: > > > > <wsdl:operation name="method1"> > > ..... > > </wsdl:operation> > > > > <wsdl:operation name="method2"> > > ..... > > </wsdl:operation> > > > > The problem is when my new client calls method2(inObject) the > > server always invokes method1(inObject). If I put operation > > method2 before method1 in wsdl and re-generate the server > > classes, the new client works. But the old client breaks > > because it is calling method2 which contains an > > unrecognizable extra element. > > > > It seems that axis doesn't use method name to find an > > operation. It always finds the first operation whose > > parameters match the one passed in, in this case the first > > operation defined in the wsdl file. Is this a bug? If not, > > does anyone know what could be a workaround? > > > > Thanks in advance. > > > > > > > > >
