两个具有相同名称但在WSDL中具有不同参数的操作

时间:2014-01-28 15:20:00

标签: java soap wsdl axis

我有一个wsdl(RPC编码),它包含2对操作,它们具有相同的操作名称,但具有不同的参数和不同的输入/输出消息。

以下是wsdl的重要部分(我可以生成java代码,wsdl有效)。

<!-- message for the first operation -->
<wsdl:message name="SomethingGoodRequest">
    <wsdl:part name="paramOne" type="xsd:int">
    </wsdl:part>
    <wsdl:part name="paramTwo" type="soapenc:string">
    </wsdl:part>
    <wsdl:part name="paramThree" type="soapenc:string">
    </wsdl:part>
    <wsdl:part name="paramFour" type="soapenc:string">
    </wsdl:part>
    <wsdl:part name="paramFive" type="soapenc:string">
    </wsdl:part>
</wsdl:message>

<!-- message for the second operation -->
<wsdl:message name="SomethingGoodRequest1">
    <wsdl:part name="paramOne" type="xsd:int">
    </wsdl:part>
    <wsdl:part name="paramTwo" type="soapenc:string">
    </wsdl:part>
    <wsdl:part name="paramThree" type="tns1:VerySpecialTypeForGoodThings">
    </wsdl:part>
    <wsdl:part name="paramFour" type="soapenc:string">
    </wsdl:part>
    <wsdl:part name="paramFive" type="soapenc:string">
    </wsdl:part>
</wsdl:message>

<!-- the operations -->
<wsdl:operation name="SomethingGood" parameterOrder="paramOne paramTwo paramThree paramFour paramFive">
    <wsdl:input message="impl:SomethingGoodRequest" name="SomethingGoodRequest" />
    <wsdl:output message="impl:SomethingGoodResponse" name="SomethingGoodResponse" />
</wsdl:operation>
<wsdl:operation name="SomethingGood" parameterOrder="paramOne paramTwo paramThree">
    <wsdl:input message="impl:SomethingGoodRequest1" name="SomethingGoodRequest1" />
    <wsdl:output message="impl:SomethingGoodResponse1" name="SomethingGoodResponse1" />
</wsdl:operation>

<wsdl:operation name="SomethingGood">
    <wsdlsoap:operation soapAction=""/>
    <wsdl:input name="SomethingGoodRequest">
        <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://nevermind" use="encoded"/>
    </wsdl:input>
    <wsdl:output name="SomethingGoodResponse">
        <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://nevermind" use="encoded"/>
    </wsdl:output>
</wsdl:operation>

<wsdl:operation name="SomethingGood">
    <wsdlsoap:operation soapAction=""/>
    <wsdl:input name="SomethingGoodRequest1">
        <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://nevermind" use="encoded"/>
    </wsdl:input>
    <wsdl:output name="SomethingGoodResponse1">
        <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://nevermind" use="encoded"/>
    </wsdl:output>
</wsdl:operation>

问题是,每当我尝试调用第二种方法(来自两个共享相同名称的人)时,我都会遇到此异常(500内部服务器错误):

faultDetail: 
       {}:return code:  500
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
    <soapenv:Fault>
      <faultcode>Server</faultcode>
      <faultstring>Missing operation for soapAction [] and body element [{http://nevermind/}SomethingGood] with SOAP Version [SOAP 1.1]</faultstring>
    </soapenv:Fault>
  </soapenv:Body>
</soapenv:Envelope>

有趣的是,我可以毫无问题地调用其他所有操作(来自java客户端和SoapUI),并且可以从共享相同名称的人那里调用第一个操作。

所以我可以使用5个参数成功获得SomethingGood,但是当我尝试使用3个参数调用一个时,我得到上述异常。

是否有任何解决方法,或仅通过修复wsdl? (我得到了wsdl,所以我不能自己编辑)

提前致谢!

1 个答案:

答案 0 :(得分:2)

尽管在WSLD中重载方法是合法的,但WS-I basic profile不允许使用此功能。 AXIS,JAX-WS,CXF,Spring和其他一些框架声称符合基本配置文件。创建此WSDL的人可能无法使用符合Java / BP的Web服务,如果您遇到这些框架,则必须修改WSDL。