Thanks for the info. Rpc/lit style service does invoke the method by name. But the message format still doesn't meet our requirements: it creates a second wrapper around all the arguments in the message. In the request, it uses the parameter name. In the response, it uses the qname.
For example, in0 is the input parameter name and we don't want <in0 xmlns=""> and </in0> in the below message. Is there any way to do that? <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <prepareSession xmlns="http://axisTest.singleSignOn.knowmed.com"> <in0 xmlns=""> <organizationId>1234567</organizationId> <user>getest</user> <patient> <idValue>MRNValue</idValue> <idType>MRN</idType> </patient> <customerId>JGFSJUFHIAS42525</customerId> </in0> </prepareSession> </soapenv:Body> </soapenv:Envelope> Thanks, -Ge -----Original Message----- From: Tevoi Andrea [mailto:[EMAIL PROTECTED]] Sent: Friday, February 07, 2003 12:23 AM To: [EMAIL PROTECTED] Subject: RE: If two methods have different names but same parameters, the first one is always called. 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. > > > > > > > > >
