Hello Rhett,

This "unwrapped" style is a convenience that is supported in the Axis provider. The more general way to write the client code would be to use an element that wraps everything. You would then have an input message with one part (an element), that can be populated programatically using the DOM API or from an XML file, as follows:

        // create the input, output and fault messages associated with this operation
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        // at this point if you want to read the XML data from a file you could
        // do something like
        //                Document doc = db.parse (new InputSource (new FileReader(..)));
        Document document = db.newDocument();
        // create element according to what is reqd by service, as specified in WSDL
        Element topLevel = document.createElementNS("http://ws.cdyne.com","GetLatLong");
        document.appendChild(topLevel);
        Element zip = document.createElement("zipcode");
        zip.setNodeValue(args[1]);
        Element license = document.createElement("LicenseKey");
        license.setNodeValue("");
        topLevel.appendChild(zip);
        topLevel.appendChild(license);
        WSIFMessage input = operation.createInputMessage();
        WSIFMessage output = operation.createOutputMessage();
        WSIFMessage fault = operation.createFaultMessage();

        // populate the input message
        input.setObjectPart("parameters",topLevel);
        // do the invocation
        if (operation.executeRequestResponseOperation(input, output, fault)) {
            // invocation succeeded, extract information from output
            // message
            Element retValue = (Element) output.getObjectPart("parameters");
            System.out.println("Got return value "+retValue);

Replace the appropriate code in the current sample client (under java/samples/complexsoap/client/dynamic/Run.java) with this and you should be able to get it to work.

Note that when you use wrapped style as above, the return value will also have just one part (an element), as specified by the WSDL.

Nirmal.


[EMAIL PROTECTED]

01/08/2003 11:47 AM
Please respond to axis-user

       
        To:        [EMAIL PROTECTED]
        cc:        
        Subject:        [wsif]  zip2geo sample questions



In the WSDL for the Zip2Geo sample, the Message "GetLatLongSoapIn" contains
a single part of "parameters" which references the element "GetLatLong"
The sample code that invokes an operation using this message, the schema is
unwrapped and two input parts are being set vs. the single part that is
specified in the WSDL document.  Also, this appears to be the case only
when and use="literal".  Does anyone know the reasoning
behind this, i.e., the unwrapping of the element reference?  Also, what
happens is the element references a sufficiently complexType whereby the
complexType is several layers deep and primitive types exist at each level?
Is a input part then required for each of those primitives?

Thanks much.

Rhett DeWall
Sybase Inc.
3665 Discovery Drive
Boulder, CO  80303
303/413-4163



Reply via email to