I have two questions that I hope y'all can help me with. Here's a little 
background on why I'm bothering y'all. We've got a bunch of java interfaces 
being used via RMI, now we want to expose them via web services, too. We do our 
own authentication, so I was thinking the easiest thing is to have the client 
call the authentication method, and then pass the resulting authentication 
token as a header arg-that way the existing java interfaces don't need to 
change.

Question 1) I'm also not such a smartie about wsdl. (I'm sure you're wondering 
if I'm a smartie about anything ;-) ) The WSDL for my service is below. It 
works just fine with WSDL2Java, and the generated Java client stubs do just 
what I want them to. However, when I Add Web Reference in .NET, it gives an 
error, "the element attribute is not allowed on encoded message parts". If I 
change the part specification from "<wsdl:part element="intf:authToken" 
name="auth_header"/>" to "<wsdl:part type="intf:authToken" 
name="auth_header"/>", it says "The datatype 'authToken' is missing.", and 
WSDL2Java says the same thing. If I undo that change and change the operation 
to be literal, then it says that "The combination of style=rpc with use=literal 
is not supported." If I change it to style=document, it says "Unable to import 
operation 'getExchangeRate'. Specified cast is not valid."

Would someone take pity on the noob and help me with my WSDL? 

Question 2) I know virtually nothing about c#, but someone gave me a test 
program that calls a web service.  I was able to figure out how to add my web 
service to the environment, and add a call to it from the little program, but 
what do I do about header args? Could someone help me figure how to pass a SOAP 
header argument on the call? Or will this problem be magically solved once I 
can successfully import the web service? Here's the code I have:

        FirstSOAPTest.CurrencyService.CurrencyWebServiceService curServ = new 
FirstSOAPTest.CurrencyService.CurrencyWebServiceService();
        // The value of a proper authToken is in this.textBoxAuthReturn.Text
        double s = curServ.getExchangeRate();


The WSDL is what was generated by Axis, and then I added the bits about a 
header arg (the parts I added are surrounded by blank lines). Here's my WSDL:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
    targetNamespace="http://localhost:8080/avalanche/services/currency";
    xmlns:impl="http://localhost:8080/avalanche/services/currency";
    xmlns:intf="http://localhost:8080/avalanche/services/currency";
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
    xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/";
    xmlns:xsd="http://www.w3.org/2001/XMLSchema";>

    <!-- added by me -->    
    <wsdl:types>
        <xsd:schema
            targetNamespace="http://localhost:8080/avalanche/services/currency";
            xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/";
            xmlns:xsd="http://www.w3.org/2001/XMLSchema";
            xmlns:xsd1="http://localhost:8080/avalanche/services/.xsd1";>
            <xsd:element name="authToken">
                <xsd:complexType>
                    <xsd:all>
                        <xsd:element maxOccurs="1" minOccurs="1" name="value" 
type="xsd:string"/>
                    </xsd:all>
                </xsd:complexType>
            </xsd:element>
        </xsd:schema>
    </wsdl:types>
    <!-- end addition -->    

    <!-- added by me -->    
    <wsdl:message name="getExchangeRateRequest">
        <wsdl:part type="intf:authToken" name="auth_header"/>
    </wsdl:message>
    <!-- end addition -->    

    <wsdl:message name="getExchangeRateResponse">
        <wsdl:part name="getExchangeRateReturn" type="xsd:double"/>
    </wsdl:message>
    <wsdl:portType name="CurrencyWebService">
        <wsdl:operation name="getExchangeRate">
            <wsdl:input message="impl:getExchangeRateRequest" 
name="getExchangeRateRequest"/>
            <wsdl:output
                message="impl:getExchangeRateResponse"
                name="getExchangeRateResponse"/>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="currencySoapBinding" type="impl:CurrencyWebService">
        <wsdlsoap:binding style="rpc" 
transport="http://schemas.xmlsoap.org/soap/http"/>

        <!-- added by me -->    
        <wsdl:operation name="getExchangeRate">
            <wsdlsoap:operation soapAction=""/>
            <wsdl:input name="getExchangeRateRequest">
                <wsdlsoap:body 
                    encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
                    namespace="http://currency.examples.ecm.opentext.com"; 
                    use="encoded"/>
                <wsdlsoap:header
                    encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
                    message="impl:getExchangeRateRequest"
                    part="auth_header"
                    use="encoded"/>
            </wsdl:input>
            <wsdl:output name="getExchangeRateResponse">
                <wsdlsoap:body
                    encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
                    
namespace="urn:http://localhost:8080/avalanche/services/currency";
                    use="encoded"/>
            </wsdl:output>
        </wsdl:operation>
        <!-- end addition -->  
  
    </wsdl:binding>
    <wsdl:service name="CurrencyWebServiceService">
        <wsdl:port binding="impl:currencySoapBinding" name="currency">
            <wsdlsoap:address 
location="http://localhost:8080/avalanche/services/currency"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>



--
'Peace is not merely a distant goal that we seek, but a means by which we 
arrive at that goal' Dr. M. L. King, Jr.
Todd Grinnell ( mailto:[EMAIL PROTECTED] ) Open Text Corp. Chicago 'burbs, IL 
Contact me for a public key
  

Reply via email to