Hi devs,

I was trying accessing an external webservice using service client as
follows,

        ServiceClient serviceClient = new ServiceClient(null, new URL("
http://www.webservicex.net/CurrencyConvertor.asmx?wsdl";), new QName("
http://www.webserviceX.NET/","CurrencyConvertor";), "CurrencyConvertorSoap");
        StAXOMBuilder stAXOMBuilder = new StAXOMBuilder(new
ByteArrayInputStream(

"<ConversionRate><FromCurrency>USD</FromCurrency><ToCurrency>LKR</ToCurrency></ConversionRate>".getBytes()));
        OMElement omElement = serviceClient.sendReceive(
                new QName("http://www.webserviceX.NET/";, "ConversionRate"),
stAXOMBuilder.getDocumentElement());
        System.out.println(omElement.toString());

But this call was failing with the exception
"System.Web.Services.Protocols.SoapException: Server did not recognize the
value of HTTP Header SOAPAction: ."

The request sent by the client had the header SOAPAction: "" whereas the
WSDL had <soap:operation soapAction="
http://www.webserviceX.NET/ConversionRate"; style="document"/>

debugging through I noticed the following lines in
WSDL11ToAxisServiceBuilder (Line 2340)

                    if (isServerSide) {

axisBindingOperation.getAxisOperation().setSoapAction(soapActionURI);

                    }
                    else {

axisBindingOperation.getAxisOperation().setOutputAction(soapActionURI);
                    }

and CommonsHTTPTransportSender has the following in line 200

soapActionString = messageContext.getAxisOperation()
                            .getSoapAction();

Now this looks like a bug to me. Does anybody have a clue as to why we dont
set the soapAction on the axisoperation when the axisService is on the
client side?

Thanks,
Keith.

-- 
Keith Chapman
Software Engineer
WSO2 Inc.
Oxygenating the Web Service Platform.
http://wso2.org/

blog: http://www.keith-chapman.org

Reply via email to