java - Axis2 生成的服务创建错误的请求

标签 java web-services apache-axis

我使用 axis2-wsdl2code-maven-plugin (1.4.1) 生成了一些 java (1.5) WS 类。当我使用这些时,奇怪的事情发生了,我根本不明白发生了什么。

问题是我调用了一种方法,但实际发生的 Web 服务调用是不同的。

ConfigServiceStub service = new ConfigServiceStub(URL);

ServiceRequest request = new ServiceRequest();
request.setProcessId(processId);
request.setServiceCode(BigInteger.valueOf(113));

service.removeService(request);

当我运行此代码时,实际发生的是对 getServiceDetails 的 Web 服务调用。我不明白为什么。以下结果是正确的 Web 服务调用。

service.getServiceDetails(request);

我在 XSD 中的重用是否导致事情变得困惑,或者这里发生了什么?

<小时/>

以下是相关的 WSDL 和 XSD:

绑定(bind)

<operation name="getServiceDetails">
    <soap:operation soapAction="http://api.nwn.no/webservices/ProductConfigurator/getServiceDetails" />
    <input><soap:body /></input>
    <output><soap:body /></output>
    <fault name="fault"><soap:fault name="fault" /></fault> 
</operation>

<operation name="removeService">
    <soap:operation soapAction="http://api.nwn.no/webservices/ProductConfigurator/removeService" />
    <input><soap:body /></input>
    <output><soap:body /></output>
    <fault name="fault"><soap:fault name="fault" /></fault>     
</operation>

端口类型

<operation name="getServiceDetails">
    <input message="tns:getServiceDetailsRequest" />
    <output message="tns:getServiceDetailsResponse" />
    <fault message="tns:fault" name="fault" />          
</operation>

<operation name="removeService">
    <input message="tns:removeServiceRequest" />
    <output message="tns:removeServiceResponse" />
    <fault message="tns:fault" name="fault" />      
</operation>

留言

<message name="getServiceDetailsRequest">
    <part name="body" element="tns:getServiceDetailsRequest" />
</message>
<message name="getServiceDetailsResponse">
    <part name="body" element="tns:getServiceDetailsResponse" />
</message>

<message name="removeServiceRequest">
    <part name="body" element="tns:removeServiceRequest" />
</message>
<message name="removeServiceResponse">
    <part name="body" element="tns:removeServiceResponse" />
</message>

架构

<xsd:element name="getServiceDetailsRequest" type="ServiceRequest" />
<xsd:element name="getServiceDetailsResponse" type="ServiceResponse" />

<xsd:element name="removeServiceRequest" type="ServiceRequest" />
<xsd:element name="removeServiceResponse" type="ServiceConfigurationResponse" />

<xsd:complexType name="ProcessRequest">
    <xsd:sequence>
        <xsd:element ref="processId" />
    </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="ServiceRequest">
    <xsd:complexContent>
        <xsd:extension base="ProcessRequest">
            <xsd:sequence>
                <xsd:element name="serviceCode" type="ServiceCode" />
            </xsd:sequence>
        </xsd:extension>
    </xsd:complexContent>
</xsd:complexType>

最佳答案

您能确定 SOAPAction 生成的值吗?应该是不一样的。

您应该考虑不要对不同的操作重复使用 XML 元素。它不符合 WS-I。 SOAPAction 对于 WS-I 兼容服务来说不是强制性的。

关于java - Axis2 生成的服务创建错误的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14732037/

相关文章:

java - 我可以为 Android 制作 HTML5 游戏吗?

java - 参数化测试套件

c# - .net 中的 RESTful 服务使用什么框架

java - Axis Web 服务保持 Activity 状态

java - Axis2转换xs :boolean to java Boolean

java - 为什么 receive() 方法没有从客户端接收数据?

c# - 是否有任何好的/可自动化的依赖管理工具来管理应用程序、数据库和外部资源的依赖关系?

java - 安卓 Intent 服务 : Unable to start

java - Talend Open Studio 将作业导出为 Web 服务并在不带 URL 参数的情况下调用它

java - 构建 Jersey Web 服务可执行文件