gpt4 book ai didi

java - Axis 生成的 wsdl 不包含所有类型定义

转载 作者:行者123 更新时间:2023-12-01 14:10:02 24 4
gpt4 key购买 nike

我正在使用 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 中,我添加了以下 block ,它允许我查看服务并请求它的 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,其中没有 WSCostCenter 或 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 缺少类型定义?如果您尝试使用此服务,则不会生成正确的代码。

最佳答案

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

关于java - Axis 生成的 wsdl 不包含所有类型定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18594454/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com