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