java - 添加 SOAP 故障而不更改 WSDL 文件?

标签 java web-services wsdl jax-ws soapfault

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

最佳答案

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

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

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

回顾一下,抛出异常将在肥皂响应中插入一个元素。

更新

自定义故障字符串:

作为参数传递给 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 异常来更改故障代码。如果您确实需要这样做,您可以查看 JAX-WS SOAPFaultException .

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

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

  • 版本不匹配:发现 SOAP Envelope 元素的命名空间无效。
  • MustUnderstand:无法理解 Header 元素的直接子元素(mustUnderstand 属性设置为“1”)。
  • 客户端:消息格式不正确或包含不正确的信息。
  • 服务器:服务器出现问题,因此消息无法继续。

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

自定义详细信息:

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

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

关于java - 添加 SOAP 故障而不更改 WSDL 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32588138/

相关文章:

java - Android RecyclerView 中的不同布局问题

java - Hibernate:将次要对象封装在映射对象中

java - JSR168 portlet 请求在 # 符号后删除参数值

java - 如何从 Jersey 过滤器中排除某些网址?

asp.net - 使用客户端证书获取 SOAP 服务器 WSDL 文件

c# - Java 和 .NET 3.5 之间进程间通信的最佳方法是什么?

java - CXF异步调用异常延迟

java - IWAB0014E 创建 Web 服务时发生意外异常

java - 用于使用 SOAP - WSDL 的命令行 java 客户端

python - 当我使用python消耗wsdl时,得到了xml.parsers.expat.ExpatError