Spring-WS:自动 wsdl 故障生成/关联

Ale*_*yna 3 java spring soap wsdl spring-ws

我在 spring-ws 中使用 DynamicWsdl11Definition 来生成我的 wsdl 规范。最终,我得到了一个没有附加到 wsdl 操作的 wsdl 错误的规范,因为我不知道如何自动将特定的 wsdl/soap 操作与特定的 wsdl 错误关联起来。我怎样才能做到这一点?有没有办法将 wsdl 错误与 XSD 模式中的 wsdl 操作相关联?

这是我的 XSD 的一部分:

    <xs:element name="setContextRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs="0" name="usageContext" nillable="true" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="setContextResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs="0" name="return" nillable="true" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
Run Code Online (Sandbox Code Playgroud)

这是我的例外:

    <xs:element name="InvalidSessionException">
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs="0" name="InvalidSessionException" nillable="true" type="fault:InvalidSession"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
Run Code Online (Sandbox Code Playgroud)

这是 WSDL 规范:

        <wsdl:operation name="setContext">
            <soap:operation soapAction=""/>
            <wsdl:input name="setContextRequest">
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output name="setContextResponse">
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
Run Code Online (Sandbox Code Playgroud)

我的问题是如何将错误与该操作相关联,最终以:

        <wsdl:operation name="setContext">
            <soap:operation soapAction=""/>
            <wsdl:input name="setContextRequest">
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output name="setContextResponse">
                <soap:body use="literal"/>
            </wsdl:output>
            <wsdl:fault name="invalidSession" type="InvalidSession"/>
        </wsdl:operation>
Run Code Online (Sandbox Code Playgroud)

谢谢。

ps:我正在设置requestSuffix、responseSuffix 和faultSuffix,因此也能够生成wsdl 故障消息。

Bij*_*men 5

对于你的第一个问题,关于如何让 sws:dynamic-wsdl 生成故障元素,约定是让故障元素以“Fault”结尾,所以如果你有一个“MemberService”,有一个“MemberRequest”,“您的 xsd 中的 MemberResponse" 和 "MemberFault" 元素,这些元素将由 Spring-WS 放在一起

<wsdl:portType name="MemberDetails">
  <wsdl:operation name="MemberDetails">
   <wsdl:input message="tns:MemberDetailsRequest" name="MemberDetailsRequest"></wsdl:input>
   <wsdl:output message="tns:MemberDetailsResponse" name="MemberDetailsResponse"></wsdl:output>
   <wsdl:fault message="tns:MemberDetailsFault" name="MemberDetailsFault"></wsdl:fault>
 </wsdl:operation>
</wsdl:portType>
Run Code Online (Sandbox Code Playgroud)

关于第二个问题,如何让 Spring-WS 填充此故障元素,我编写了一个自定义 SoapFaultExceptionResolver,它会查找我的特定类型的异常并逐个标记填充故障元素。有点hacky,但我没有看到任何其他方式。