从单向操作中抛出异常

时间:2011-09-30 08:01:25

标签: exception soap wsdl soa fault

假设您有以下操作:

void AddCustomer(Customer)

(即Customer对象作为输入而没有输出)

遵守WS-I BP 1.1,不允许为单向操作定义故障消息[1]。但是,您可能希望抛出异常,例如,客户是重复的。你会如何实现这一目标?将操作定义为请求/响应,并显示操作成功的空响应?在我看来并不是那么漂亮......也许你知道另一种方式?我的意思是:在java / .net程序中,你仍然希望能够为void-methods ...

抛出异常

示例:

<operation name="AddCustomer">
    <input message="tns:AddCustomerRequest"/>
    <output message="tns:AddCustomerResponse"/>
    <fault name="DuplicateCustomer" message="tns:DuplicateFault"/>
</operation>

其中AddCustomerResponse将是一个空序列。

[1] http://www.w3.org/TR/wsdl#_porttypes

2 个答案:

答案 0 :(得分:0)

根据wsdl 1规范,没有解决方案。

答案 1 :(得分:0)

您不必在操作中定义输出消息。在这种情况下,操作可以只有输入和故障消息。像这样

<operation name="AddCustomer">
    <input message="tns:AddCustomerRequest"/>
    <fault name="DuplicateCustomer" message="tns:DuplicateFault"/>
</operation>

但这并没有改变request-response操作的事实。这是在这种情况下可以实现的最佳效果。

wsdl规范不允许对单向操作进行任何肥皂响应(即使是偶尔的)。