1

axis2-wsdl2code-maven-plugin(1.4.1)を使用していくつかのjava(1.5)WSクラスを生成しました。これらを使用すると、何か奇妙なことが起こっており、何が起こっているのか理解できません。

問題は、1つのメソッドを呼び出すことですが、実際に発生する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>
4

2 に答える 2

0

Can you determine the generated value for SOAPAction? It should be different.

You should consider not to reuse XML elements for different operations. It is not WS-I compliant. SOAPAction is not mandatory for WS-I compliant services.

于 2013-02-08T09:32:34.777 に答える
0

別のオプションは、ここで説明されているように、databindingName パラメーターを使用して別のデータバインディングを使用することです。

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

于 2013-02-08T10:25:39.210 に答える