Search code examples
javaweb-servicessoapwsdl

soap web service response very slow


I generated a soap web service

and when I try to consume this service I have a problem

it takes many time to get the response ( more than 4 minutes )

I try with this test code :

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

@WebService
@SOAPBinding(style = Style.RPC)
public interface Balance {


    @WebMethod String getValue();

}

this is the java class

import javax.jws.WebService;



@WebService(endpointInterface = "com.dq.test.web.manager.impl.Balance")
public class BalanceImp implements Balance{


    @Override
    public String getValue() {
        // TODO Auto-generated method stub
        return "test";
    }


}

to publish this web service I used this code :

Endpoint.publish("http://192.168.1.13:8080/WS/TestSoap", new BalanceImp());

this is the code of wsdl :

<!--
 Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. 
-->
<!--
 Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. 
-->
<definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://impl.manager.web.test.dq.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://impl.manager.web.test.dq.com/" name="BalanceImpService">
<types/>
<message name="getValue"/>
<message name="getValueResponse">
<part name="return" type="xsd:string"/>
</message>
<portType name="Balance">
<operation name="getValue">
<input message="tns:getValue"/>
<output message="tns:getValueResponse"/>
</operation>
</portType>
<binding name="BalanceImpPortBinding" type="tns:Balance">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>
<operation name="getValue">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal" namespace="http://impl.manager.web.test.dq.com/"/>
</input>
<output>
<soap:body use="literal" namespace="http://impl.manager.web.test.dq.com/"/>
</output>
</operation>
</binding>
<service name="BalanceImpService">
<port name="BalanceImpPort" binding="tns:BalanceImpPortBinding">
<soap:address location="http://192.168.1.13:8080/WS/TestSoap"/>
</port>
</service>
</definitions>

I used eclipse in order to generate and test the client :

this is the test code :

BalanceImpServiceLocator loc = new BalanceImpServiceLocator();
BalanceImpPortBindingStub bindingStub = new BalanceImpPortBindingStub(new URL(loc.getBalanceImpPortAddress()),loc);

System.out.println(" -- start test ----");

String string = bindingStub.getValue()

I try with another wsdl example which is published in the net ( http://www.webservicex.net/WeatherForecast.asmx?WSDL ).

I generate the client using also eclipse .

the response is very fast for this example .

this is the source code for this example :

wsdl:definitions xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://www.webservicex.net" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://www.webservicex.net">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
Get one week weather forecast for valid zip code or Place name in USA
</wsdl:documentation>
<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="http://www.webservicex.net">
<s:element name="GetWeatherByZipCode">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="ZipCode" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetWeatherByZipCodeResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="GetWeatherByZipCodeResult" type="tns:WeatherForecasts"/>
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="WeatherForecasts">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="Latitude" type="s:float"/>
<s:element minOccurs="1" maxOccurs="1" name="Longitude" type="s:float"/>
<s:element minOccurs="1" maxOccurs="1" name="AllocationFactor" type="s:float"/>
<s:element minOccurs="0" maxOccurs="1" name="FipsCode" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="PlaceName" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="StateCode" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="Status" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="Details" type="tns:ArrayOfWeatherData"/>
</s:sequence>
</s:complexType>
<s:complexType name="ArrayOfWeatherData">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="WeatherData" type="tns:WeatherData"/>
</s:sequence>
</s:complexType>
<s:complexType name="WeatherData">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Day" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="WeatherImage" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="MaxTemperatureF" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="MinTemperatureF" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="MaxTemperatureC" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="MinTemperatureC" type="s:string"/>
</s:sequence>
</s:complexType>
<s:element name="GetWeatherByPlaceName">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="PlaceName" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetWeatherByPlaceNameResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="GetWeatherByPlaceNameResult" type="tns:WeatherForecasts"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="WeatherForecasts" type="tns:WeatherForecasts"/>
</s:schema>
</wsdl:types>
<wsdl:message name="GetWeatherByZipCodeSoapIn">
<wsdl:part name="parameters" element="tns:GetWeatherByZipCode"/>
</wsdl:message>
<wsdl:message name="GetWeatherByZipCodeSoapOut">
<wsdl:part name="parameters" element="tns:GetWeatherByZipCodeResponse"/>
</wsdl:message>
<wsdl:message name="GetWeatherByPlaceNameSoapIn">
<wsdl:part name="parameters" element="tns:GetWeatherByPlaceName"/>
</wsdl:message>
<wsdl:message name="GetWeatherByPlaceNameSoapOut">
<wsdl:part name="parameters" element="tns:GetWeatherByPlaceNameResponse"/>
</wsdl:message>
<wsdl:message name="GetWeatherByZipCodeHttpGetIn">
<wsdl:part name="ZipCode" type="s:string"/>
</wsdl:message>
<wsdl:message name="GetWeatherByZipCodeHttpGetOut">
<wsdl:part name="Body" element="tns:WeatherForecasts"/>
</wsdl:message>
<wsdl:message name="GetWeatherByPlaceNameHttpGetIn">
<wsdl:part name="PlaceName" type="s:string"/>
</wsdl:message>
<wsdl:message name="GetWeatherByPlaceNameHttpGetOut">
<wsdl:part name="Body" element="tns:WeatherForecasts"/>
</wsdl:message>
<wsdl:message name="GetWeatherByZipCodeHttpPostIn">
<wsdl:part name="ZipCode" type="s:string"/>
</wsdl:message>
<wsdl:message name="GetWeatherByZipCodeHttpPostOut">
<wsdl:part name="Body" element="tns:WeatherForecasts"/>
</wsdl:message>
<wsdl:message name="GetWeatherByPlaceNameHttpPostIn">
<wsdl:part name="PlaceName" type="s:string"/>
</wsdl:message>
<wsdl:message name="GetWeatherByPlaceNameHttpPostOut">
<wsdl:part name="Body" element="tns:WeatherForecasts"/>
</wsdl:message>
<wsdl:portType name="WeatherForecastSoap">
<wsdl:operation name="GetWeatherByZipCode">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
Get one week weather forecast for a valid Zip Code(USA)
</wsdl:documentation>
<wsdl:input message="tns:GetWeatherByZipCodeSoapIn"/>
<wsdl:output message="tns:GetWeatherByZipCodeSoapOut"/>
</wsdl:operation>
<wsdl:operation name="GetWeatherByPlaceName">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
Get one week weather forecast for a place name(USA)
</wsdl:documentation>
<wsdl:input message="tns:GetWeatherByPlaceNameSoapIn"/>
<wsdl:output message="tns:GetWeatherByPlaceNameSoapOut"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:portType name="WeatherForecastHttpGet">
<wsdl:operation name="GetWeatherByZipCode">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
Get one week weather forecast for a valid Zip Code(USA)
</wsdl:documentation>
<wsdl:input message="tns:GetWeatherByZipCodeHttpGetIn"/>
<wsdl:output message="tns:GetWeatherByZipCodeHttpGetOut"/>
</wsdl:operation>
<wsdl:operation name="GetWeatherByPlaceName">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
Get one week weather forecast for a place name(USA)
</wsdl:documentation>
<wsdl:input message="tns:GetWeatherByPlaceNameHttpGetIn"/>
<wsdl:output message="tns:GetWeatherByPlaceNameHttpGetOut"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:portType name="WeatherForecastHttpPost">
<wsdl:operation name="GetWeatherByZipCode">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
Get one week weather forecast for a valid Zip Code(USA)
</wsdl:documentation>
<wsdl:input message="tns:GetWeatherByZipCodeHttpPostIn"/>
<wsdl:output message="tns:GetWeatherByZipCodeHttpPostOut"/>
</wsdl:operation>
<wsdl:operation name="GetWeatherByPlaceName">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
Get one week weather forecast for a place name(USA)
</wsdl:documentation>
<wsdl:input message="tns:GetWeatherByPlaceNameHttpPostIn"/>
<wsdl:output message="tns:GetWeatherByPlaceNameHttpPostOut"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="WeatherForecastSoap" type="tns:WeatherForecastSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetWeatherByZipCode">
<soap:operation soapAction="http://www.webservicex.net/GetWeatherByZipCode" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetWeatherByPlaceName">
<soap:operation soapAction="http://www.webservicex.net/GetWeatherByPlaceName" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="WeatherForecastSoap12" type="tns:WeatherForecastSoap">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetWeatherByZipCode">
<soap12:operation soapAction="http://www.webservicex.net/GetWeatherByZipCode" style="document"/>
<wsdl:input>
<soap12:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetWeatherByPlaceName">
<soap12:operation soapAction="http://www.webservicex.net/GetWeatherByPlaceName" style="document"/>
<wsdl:input>
<soap12:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="WeatherForecastHttpGet" type="tns:WeatherForecastHttpGet">
<http:binding verb="GET"/>
<wsdl:operation name="GetWeatherByZipCode">
<http:operation location="/GetWeatherByZipCode"/>
<wsdl:input>
<http:urlEncoded/>
</wsdl:input>
<wsdl:output>
<mime:mimeXml part="Body"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetWeatherByPlaceName">
<http:operation location="/GetWeatherByPlaceName"/>
<wsdl:input>
<http:urlEncoded/>
</wsdl:input>
<wsdl:output>
<mime:mimeXml part="Body"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="WeatherForecastHttpPost" type="tns:WeatherForecastHttpPost">
<http:binding verb="POST"/>
<wsdl:operation name="GetWeatherByZipCode">
<http:operation location="/GetWeatherByZipCode"/>
<wsdl:input>
<mime:content type="application/x-www-form-urlencoded"/>
</wsdl:input>
<wsdl:output>
<mime:mimeXml part="Body"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetWeatherByPlaceName">
<http:operation location="/GetWeatherByPlaceName"/>
<wsdl:input>
<mime:content type="application/x-www-form-urlencoded"/>
</wsdl:input>
<wsdl:output>
<mime:mimeXml part="Body"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="WeatherForecast">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
Get one week weather forecast for valid zip code or Place name in USA
</wsdl:documentation>
<wsdl:port name="WeatherForecastSoap" binding="tns:WeatherForecastSoap">
<soap:address location="http://www.webservicex.net/WeatherForecast.asmx"/>
</wsdl:port>
<wsdl:port name="WeatherForecastSoap12" binding="tns:WeatherForecastSoap12">
<soap12:address location="http://www.webservicex.net/WeatherForecast.asmx"/>
</wsdl:port>
<wsdl:port name="WeatherForecastHttpGet" binding="tns:WeatherForecastHttpGet">
<http:address location="http://www.webservicex.net/WeatherForecast.asmx"/>
</wsdl:port>
<wsdl:port name="WeatherForecastHttpPost" binding="tns:WeatherForecastHttpPost">
<http:address location="http://www.webservicex.net/WeatherForecast.asmx"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

I did not determine the difference between the two example and why in the first example the response is very slow


Solution

  • The problem is with the publishing method

    Endpoint.publish("http://192.168.1.13:8080/WS/TestSoap", new BalanceImp());
    

    Try to use the wizard of creating and publishing a web service using eclipse in the source application (the publisher). This wizard will change you web.xml by adding

     <servlet>
        <display-name>Apache-Axis Servlet</display-name>
        <servlet-name>AxisServlet</servlet-name>
        <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/servlet/AxisServlet</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>*.jws</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
      </servlet-mapping>
      <servlet>
        <display-name>Axis Admin Servlet</display-name>
        <servlet-name>AdminServlet</servlet-name>
        <servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
        <load-on-startup>100</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>AdminServlet</servlet-name>
        <url-pattern>/servlet/AdminServlet</url-pattern>
      </servlet-mapping>
    

    and will add you under WEB-INF/ files like deploy.wsdd ,undeploy.wsdd and of course you service.wsdl in which you will find your

     <wsdlsoap:address location=".."/>
    

    Also the file server-config.wsdd will be added when deployed.

    put that address and you will get Your service .

    Your response will be instant.