【问题标题】:Axis generated wsdl does not include all type definitionsAxis 生成的 wsdl 不包括所有类型定义
【发布时间】:2013-09-03 14:08:51
【问题描述】:

我将 Axis 1.1 与 Java 1.4 一起使用。我的代码正在集成到一个大型现成系统中,我无法升级其中任何一个组件。

我有以下课程,并且正在通过 Axis Web 服务公开 UpdateChartOfAccounts 方法。

public class ChartOfAccountsWebService
{
    public WSResponse[] UpdateChartOfAccounts(WSCostCenter[] costCenters) throws Exception{     
        WSResponse[] responses = new WSResponse[costCenters.length];

            //logic removed

        return responses;
    }

    public class WSCostCenter{
        public String costCenter;
        public String costCenterDesc;
        public String approver;
        public String companyNumber;
        public String inactiveFlag; 
    }

    public class WSResponse{
        public String ID;
        public String col;
        public String colValue;
        public String[] errors;
        public int lineNum;
        public int recNum;
    }
}

在我的 server-config.wsdd 中,我添加了以下块,它允许我查看服务并请求它的 wsdl:

 <service name="ChartOfAccountsWebService" provider="java:RPC">
  <parameter name="allowedMethods" value="UpdateChartOfAccounts"/>
  <parameter name="className" value="com.integration.webservices.ChartOfAccountsWebService"/>
  <parameter name="scope" value="Application"/>
 </service>

这会生成以下 WSDL,其中没有 WSCosCenter 或 WSResponse 的定义:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://localhost:7001/services/ChartOfAccountsWebService" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost:7001/services/ChartOfAccountsWebService" xmlns:intf="http://localhost:7001/services/ChartOfAccountsWebService" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <wsdl:types>
        <schema targetNamespace="http://localhost:7001/services/ChartOfAccountsWebService" xmlns="http://www.w3.org/2001/XMLSchema">
            <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
            <complexType name="ArrayOf_tns1_ChartOfAccountsWebService_WSCostCenter">
                <complexContent>
                    <restriction base="soapenc:Array">
                        <attribute ref="soapenc:arrayType" wsdl:arrayType="tns1:ChartOfAccountsWebService_WSCostCenter[]"/>
                    </restriction>
                </complexContent>
            </complexType>
            <complexType name="ArrayOf_tns1_ChartOfAccountsWebService_WSResponse">
                <complexContent>
                    <restriction base="soapenc:Array">
                        <attribute ref="soapenc:arrayType" wsdl:arrayType="tns1:ChartOfAccountsWebService_WSResponse[]"/>
                    </restriction>
                </complexContent>
            </complexType>
        </schema>
    </wsdl:types>
    <wsdl:message name="UpdateChartOfAccountsResponse">
        <wsdl:part name="UpdateChartOfAccountsReturn" type="impl:ArrayOf_tns1_ChartOfAccountsWebService_WSResponse"/>
    </wsdl:message>
    <wsdl:message name="UpdateChartOfAccountsRequest">
        <wsdl:part name="costCenters" type="impl:ArrayOf_tns1_ChartOfAccountsWebService_WSCostCenter"/>
    </wsdl:message>
    <wsdl:portType name="ChartOfAccountsWebService">
        <wsdl:operation name="UpdateChartOfAccounts" parameterOrder="costCenters">
            <wsdl:input message="impl:UpdateChartOfAccountsRequest" name="UpdateChartOfAccountsRequest"/>
            <wsdl:output message="impl:UpdateChartOfAccountsResponse" name="UpdateChartOfAccountsResponse"/>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="ChartOfAccountsWebServiceSoapBinding" type="impl:ChartOfAccountsWebService">
        <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="UpdateChartOfAccounts">
            <wsdlsoap:operation soapAction=""/>
            <wsdl:input name="UpdateChartOfAccountsRequest">
                <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://webservices.integration" use="encoded"/>
            </wsdl:input>
            <wsdl:output name="UpdateChartOfAccountsResponse">
                <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:7001/services/ChartOfAccountsWebService" use="encoded"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="ChartOfAccountsWebServiceService">
        <wsdl:port binding="impl:ChartOfAccountsWebServiceSoapBinding" name="ChartOfAccountsWebService">
            <wsdlsoap:address location="http://localhost:7001/services/ChartOfAccountsWebService"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

为什么 WSConstCenter 和 WSResponse 缺少类型定义?如果您尝试使用此服务,它不会生成正确的代码。

【问题讨论】:

    标签: java web-services wsdl axis java1.4


    【解决方案1】:

    Axis 不喜欢我的嵌套类。当我将两个内部类提取到它们自己的 java 文件中时,WSDL 生成正确:

    public class ChartOfAccountsWebService
    {
        public WSResponse[] UpdateChartOfAccounts(WSCostCenter[] costCenters) throws Exception{     
            WSResponse[] responses = new WSResponse[costCenters.length];
    
                //logic removed
    
            return responses;
        }
    }
    
    public class WSCostCenter{
        public String costCenter;
        public String costCenterDesc;
        public String approver;
        public String companyNumber;
        public String inactiveFlag; 
    }
    
    public class WSResponse{
        public String ID;
        public String col;
        public String colValue;
        public String[] errors;
        public int lineNum;
        public int recNum;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-08-09
      • 2011-10-13
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多