Search code examples
javaweb-servicessoapwsdlaxis

Java generates the WSDL but cant access it using ?wsdl


I need my web service class to return an array of the following customer class which has an array in itself.

When create the web service the wsdl will be created but when I try to access it using its url it shows the following error.

Following error will be shown when I add ?wsdl to address

AXIS error

Could not generate WSDL!

There is no SOAP service at this location

Following Error will be shown when I do not add ?wsdl to address

AXIS error

No service is available at this URL

My Customer class

package myclasses;

public class customer {
private String name;
private int age;
private int[] rankings;

public customer(){
    //Any initializations here.
}

public customer(String n, int a) {
    this.name = n;
    this.age = a;
    rankings = new int[2];
    rankings[0] = 1;
    rankings[1] = 2;

}

public String getName() {
    return name;
}

............Rest of setter and getters goes here .............

}

My Web service class

     package services;

import myclasses.customer;

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

@WebService (name="Hellos", 
targetNamespace="http://localhost:8081/Mywebservice2/services/Hellos")  
@SOAPBinding  
(  
      style = SOAPBinding.Style.RPC,  
      use = SOAPBinding.Use.LITERAL,  
      parameterStyle = SOAPBinding.ParameterStyle.WRAPPED  
 )  
public class Hellos {

    @WebMethod
    public @WebResult(name="name",partName="name") String getName(){
        return "Jack";
    }
    
    @WebMethod
    public @WebResult (name="customers",partName="customers") customer[] mycustomers() {
        customer[] cus = new customer[2];
        cus[0] = new customer("Jack", 28);
        cus[1] = new customer("Alex", 29);
        return cus;
        
    }
}

My wsdl

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://services" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://services" xmlns:intf="http://services" xmlns:tns1="http://myclasses" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)-->
 <wsdl:types>
  <schema elementFormDefault="qualified" targetNamespace="http://services" xmlns="http://www.w3.org/2001/XMLSchema">
   <import namespace="http://myclasses"/>
   <element name="getName">
    <complexType/>
   </element>
   <element name="getNameResponse">
    <complexType>
     <sequence>
      <element name="getNameReturn" type="xsd:string"/>
     </sequence>
    </complexType>
   </element>
   <element name="mycustomers">
    <complexType/>
   </element>
   <element name="mycustomersResponse">
    <complexType>
     <sequence>
      <element maxOccurs="unbounded" name="mycustomersReturn" type="tns1:customer"/>
     </sequence>
    </complexType>
   </element>
  </schema>
  <schema elementFormDefault="qualified" targetNamespace="http://myclasses" xmlns="http://www.w3.org/2001/XMLSchema">
   <complexType name="customer">
    <sequence>
     <element name="age" type="xsd:int"/>
     <element name="name" nillable="true" type="xsd:string"/>
    </sequence>
   </complexType>
  </schema>
 </wsdl:types>

   <wsdl:message name="getNameResponse">

      <wsdl:part element="impl:getNameResponse" name="parameters">

      </wsdl:part>

   </wsdl:message>

   <wsdl:message name="mycustomersResponse">

      <wsdl:part element="impl:mycustomersResponse" name="parameters">

      </wsdl:part>

   </wsdl:message>

   <wsdl:message name="mycustomersRequest">

      <wsdl:part element="impl:mycustomers" name="parameters">

      </wsdl:part>

   </wsdl:message>

   <wsdl:message name="getNameRequest">

      <wsdl:part element="impl:getName" name="parameters">

      </wsdl:part>

   </wsdl:message>

   <wsdl:portType name="Hellos">

      <wsdl:operation name="getName">

         <wsdl:input message="impl:getNameRequest" name="getNameRequest">

       </wsdl:input>

         <wsdl:output message="impl:getNameResponse" name="getNameResponse">

       </wsdl:output>

      </wsdl:operation>

      <wsdl:operation name="mycustomers">

         <wsdl:input message="impl:mycustomersRequest" name="mycustomersRequest">

       </wsdl:input>

         <wsdl:output message="impl:mycustomersResponse" name="mycustomersResponse">

       </wsdl:output>

      </wsdl:operation>

   </wsdl:portType>

   <wsdl:binding name="HellosSoapBinding" type="impl:Hellos">

      <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

      <wsdl:operation name="getName">

         <wsdlsoap:operation soapAction=""/>

         <wsdl:input name="getNameRequest">

            <wsdlsoap:body use="literal"/>

         </wsdl:input>

         <wsdl:output name="getNameResponse">

            <wsdlsoap:body use="literal"/>

         </wsdl:output>

      </wsdl:operation>

      <wsdl:operation name="mycustomers">

         <wsdlsoap:operation soapAction=""/>

         <wsdl:input name="mycustomersRequest">

            <wsdlsoap:body use="literal"/>

         </wsdl:input>

         <wsdl:output name="mycustomersResponse">

            <wsdlsoap:body use="literal"/>

         </wsdl:output>

      </wsdl:operation>

   </wsdl:binding>

   <wsdl:service name="HellosService">

      <wsdl:port binding="impl:HellosSoapBinding" name="Hellos">

 

        <wsdlsoap:address location="http://localhost:8081/Mywebservice2/services/Hellos"/>
    
           </wsdl:port>
    
        </wsdl:service>
    
     </wsdl:definitions>

Solution

  • The value type "myclasses.customer" used via the service class "services.Hellos" does not have a public default constructor

    Just use this in customer class.

    public customer()
    {
      //Any initializations here.
    }