1

我需要我的 Web 服务类返回以下客户类的数组,该类本身有一个数组。

创建 Web 服务时,将创建 wsdl,但是当我尝试使用其 url 访问它时,它显示以下错误。

将 ?wsdl 添加到地址时将显示以下错误

轴错误

无法生成 WSDL!

此位置没有 SOAP 服务

当我不将 ?wsdl 添加到地址时,将显示以下错误

AXIS error

No service is available at this URL

我的客户类

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 .............

}

我的 Web 服务类

     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;
        
    }
}

我的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>
4

3 回答 3

1

通过服务类“services.Hellos”使用的值类型“myclasses.customer”没有公共默认构造函数

只需在客户类中使用它。

public customer()
{
  //Any initializations here.
}
于 2013-01-08T04:18:52.587 回答
1

在你的网络服务定义中试试这个

@SOAPBinding
(
style = SOAPBinding.Style.DOCUMENT,
use = SOAPBinding.Use.LITERAL,
parameterStyle = SOAPBinding.ParameterStyle.WRAPPED
) 
于 2013-01-08T04:38:21.610 回答
0

我最近遇到了同样的问题。

解决方案:就我而言,我使用的是 Axis 1.4,并且正在将应用程序部署在 tomcat 上。但是,由于某种原因,生成的 server-config.wsdd 没有在战争中打包,因此没有部署在 tomcat 上。有一次,我确保这正在发生,它开始对我正常工作。

于 2014-09-04T10:02:26.710 回答