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

时间:2013-02-06 14:58:07

标签: java web-services axis2

我使用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:

装订

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

PortType的

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

2 个答案:

答案 0 :(得分:0)

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

您应该考虑不将XML元素重用于不同的操作。它不符合WS-I标准。对于符合WS-I的服务,SOAPAction不是必需的。

答案 1 :(得分:0)

另一种选择是使用databindingName参数使用另一个数据绑定,如下所述:

http://axis.apache.org/axis2/java/core/tools/maven-plugins/maven-wsdl2code-plugin.html