2013-02-06 21 views
1

我已经使用axis2-wsdl2code-maven-plugin(1.4.1)生成了一些java(1.5)WS类。当我使用这些奇怪的事情发生时,我根本不明白发生了什么。Axis2生成的服务创建错误的请求

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

ConfigServiceStub service = new ConfigServiceStub(URL); 

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

service.removeService(request); 

当我运行这段代码,实际发生的事情是一个Web服务调用getServiceDetails。我不明白为什么。以下结果导致正确的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> 

回答

0

你能确定的SOAPAction所产生的价值呢?它应该是不同的。

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

相关问题