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 故障消息。
对于你的第一个问题,关于如何让 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,但我没有看到任何其他方式。