Hi, I am calling an Axis 1.4 service through the browser with 4 URL parameters like this:
http://localhost:8012/axis/services/LocationService?method=getLocationsByCoordinates®ion=Hawaii&delta=2&latitude=20&longitude=-160 The operation and parameters are defined in Document/Literal Wrapped style WSDL like this: <xsd:element name="getLocationsByCoordinates"> <xsd:complexType> <xsd:sequence> <xsd:element name="region" type="xsd:string" /> <xsd:element name="latitude" type="xsd:double" /> <xsd:element name="longitude" type="xsd:double" /> <xsd:element name="delta" type="xsd:double" /> </xsd:sequence> </xsd:complexType> </xsd:element> <wsdl:message name="getLocationsByCoordinatesRequest"> <wsdl:part element="tns:getLocationsByCoordinates" name="parameters" /> </wsdl:message> >From above HTTP request Axis generates a request SOAP envelope like this: <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <getLocationsByCoordinates> <region>Hawaii</region> <longitude>-156</longitude> <delta>1</delta> <latitude>20</latitude> </getLocationsByCoordinates> </SOAP-ENV:Body> </SOAP-ENV:Envelope> However looking at the logs seems the parameter ordering was changed when invoking service: region = Hawaii latitude = -156.0 longitude = 20.0 delta = 1.0 After some debugging it seems the problem is in Axis RPCHandler.java http://svn.apache.org/viewvc/webservices/axis/trunk/java/src/org/apache/axis/message/RPCHandler.java?view=markup The parameter descriptor lookup by QName returns null: // Try by name first if (isResponse) { paramDesc = operation.getOutputParamByQName(qname); } else { paramDesc = operation.getInputParamByQName(qname); } so Axis then tries to lookup parameter descriptor by position: // If that didn't work, try position // FIXME : Do we need to be in EITHER named OR positional // mode? I.e. will it screw us up to find something // by position if we've already looked something up // by name? I think so... if (paramDesc == null) { if (isResponse) { paramDesc = operation.getReturnParamDesc(); } else { paramDesc = operation.getParameter(rpcElem.getParams().size() - 1); } } The problem is lookup by position results in botched parameter ordering when invoking the service. My question is how can I specify operation parameters in WSDL or WSDD such that the parameter QName lookup will not return null, or parameter position ordering is preserved when inovked through AxisServlet? -- View this message in context: http://www.nabble.com/AxisServlet-parameter-order-mismatch-tp18967041p18967041.html Sent from the Axis - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]