在不更改WSDL文件的情况下添加soap故障?

时间:2015-09-15 14:02:37

标签: java web-services wsdl jax-ws soapfault

我想在我的JAX-WS Web服务中添加一些SOAP Fault,但我不想更改WSDL架构的内容。据我所知,我必须使用注释@WebFault来定义SOAP Fault,它会在下次构建期间自动导致WSDL中的更改。有没有办法在不改变WSDL方案内容的情况下使用SOAP Fault?

2 个答案:

答案 0 :(得分:2)

当您从代码中抛出异常时,它将在响应中由JAX-WS自动映射到SOAP错误。无需在WSDL中定义错误。

使用@WebFault或在WSDL文件中定义<soap:fault>元素用于声明特定操作可能返回自定义SOAP错误。

@WebFault肯定会在生成的WSDL中添加<soap:fault>元素。

总结一下,抛出一个Exception会在soap响应中插入一个元素。

更新

自定义faulttring:

作为参数传递给Exception构造函数的字符串消息表示<soap:fault>中的faultstring元素。例如:

throw new Exception("This is the faultstring text");

肥皂反应导致的错误:

<soap:fault>
    <faultcode>soap:Server</faultcode>
    <faultstring>This is the faultstring text</faultstring>
</soap:fault>

自定义故障代码:

我认为您不能使用普通的Java异常更改faultcode。如果你真的需要这样做,你可以看看JAX-WS SOAPFaultException

请记住,故障代码用于指示产生的错误类型,并且大多数情况下您将从Web服务返回服务器故障。

这是SOAP 1.1和1.2中现有的四个错误代码:

  • VersionMismatch :找到SOAP Envelope元素的无效命名空间。
  • MustUnderstand :未理解Header元素的直接子元素,其mustUnderstand属性设置为“1”。
  • 客户端:邮件格式错误或包含错误信息。
  • 服务器:服务器出现问题,导致邮件无法继续。

前三个将在解析SOAP请求时由JAX-WS创建,除非有非常特殊的情况,或者您正在编写自己的JAX-WS处理程序/拦截器,否则除了'之外不需要返回任何其他故障代码'服务器”。

自定义详细信息:

<detail>元素将填充一个表示异常的元素。例如,如果你抛出new MyCustomException("custom message"),它将是这样的:

<detail>
    <MyCustomException>
        <message>custom message</message>
    </MyCustomException>
</detail>

答案 1 :(得分:0)

使用Soap Ui测试您的Web服务。我只是测试了我的,在异常中使用自定义消息,当我看到来自Soap Ui的响应时,我看到Fault String有我的自定义消息。