我想将一些SOAP错误添加到我的JAX-WS Web服务中,但我不想更改WSDL模式的内容。据我所知,我将不得不使用annotation @WebFault来定义SOAP Fault,并在下一次构建时自动导致WSDL中的更改。有没有办法在不更改WSDL方案内容的情况下使用SOAP Faults?在不更改WSDL文件的情况下添加soap故障?
0
A
回答
2
当您从您的代码中抛出异常时,它将在响应中由JAX-WS自动映射到SOAP错误。没有必要在WSDL中定义错误。
使用@WebFault
或在WSDL文件中定义<soap:fault>
元素用于声明特定操作可能会返回自定义SOAP错误。
@WebFault
肯定会在生成的WSDL中添加一个<soap:fault>
元素。
回顾一下,抛出异常会在肥皂响应中插入一个元素。
更新
定制faultstring:
,你作为参数传递给Exception
构造函数的字符串消息表示在<soap:fault>
的faultstring元素。例如:在SOAP响应
throw new Exception("This is the faultstring text");
由此造成的故障:
<soap:fault>
<faultcode>soap:Server</faultcode>
<faultstring>This is the faultstring text</faultstring>
</soap:fault>
自定义的faultcode:
我不认为你可以改变正常的Java异常在faultcode。如果您确实需要这样做,您可以查看JAX-WS SOAPFaultException。
请记住,故障码用于指示产生的错误类型,并且大多数时候您将从Web服务返回服务器故障。
这是SOAP 1.1和1.2的四个现有的故障代码:
- VersionMismatch:发现SOAP Envelope元素的无效命名空间。
- 必须了解:Heading元素的直接子元素(其mustUnderstand属性设置为“1”)不被理解。
- 客户端:邮件格式不正确或包含不正确的信息。
- 服务器:服务器出现问题,消息无法继续处理。
前三打算解析SOAP请求时,除非有一个非常具体的情况,或者你正在编写自己的JAX-WS处理程序/拦截器,你将不再需要返回任何其他要通过JAX-WS创建“服务器”以外的错误代码。
定制细节:
的<detail>
元件将与表示所述异常的元素来填充。因为如果你扔一个new MyCustomException("custom message")
例如,它会是这样的:
<detail>
<MyCustomException>
<message>custom message</message>
</MyCustomException>
</detail>
0
使用SOAP UI测试您的Web服务。我只是在异常中使用自定义消息进行了测试,当我看到Soap Ui的响应时,我看到Fault String具有我的自定义消息。
相关问题
- 1. WSO2AM没有故障的情况下产生SOAP信封
- 2. 在不添加配置文件的情况下提交/推送项目更改
- 3. 如何在不更改当前工作目录的情况下添加文件?
- 4. Sharepoint:如何在不更改版本的情况下添加文件?
- 5. 在不更改源代码的情况下添加钩子
- 6. 如何在不更改配置的情况下添加地图?
- 7. 在不使用更改语句的情况下添加新列
- 8. DotNetZip在不创建文件夹的情况下添加文件
- 9. 在CXF SOAP故障
- 10. SOAP PHP故障解析WSDL:无法加载外部实体?
- 11. 如何在不更改文件类型的情况下更改文件名?
- 12. 在没有WSDL的情况下执行Saber SOAP请求
- 13. 如何在没有WSDL的情况下创建soap客户端
- 14. 在不暴露明文的情况下更改加密密钥
- 15. 如何在activeMq tcp故障转移情况下处理连接故障
- 16. 没有出现在WSDL中的JAX-WS Soap故障
- 17. 在不更改PHP格式的情况下读写JSON文件
- 18. 在不更改GWT文件的情况下部署到AppEngine
- 19. 模拟故障的情况下在jQuery的POST方法
- 20. GIT在我的情况下添加回复(保持更改)
- 21. 可靠的UDP的故障情况?
- 22. 在2D 2D阵列的情况下出现Seg故障
- 23. 在不更改扩展名的情况下更改文件的结尾名称
- 24. ADB适配器的故障情况
- 25. 简单的AVFoundation故障排除情况
- 26. Java:如何在不修改类文件的情况下添加到基类
- 27. 在不更改版本的情况下更新受管文档
- 28. 在这种情况下Redis是单点故障(Redis,Node.JS,Socket.IO)吗?
- 29. 如何在不添加填充的情况下修改标题?
- 30. 在不改变总宽度的情况下添加填充
好吧,但是如果我想更改faultcode和faultstring呢? – ctomek
我更新了答案。您可以使用java Exceptions自定义faultstring,但不能使用faultcode。 –
如果我抛出检查的异常,那么我必须通过添加“throws”子句来更改我的webmethod的签名,因此我将不得不更改我的web方法的接口,以便不会在Web服务中做大的更改就抛出检查的异常接口。正如我发现的那样,我必须抛出未经检查的异常。但是当我抛出RuntimeException它仍然不能按预期工作时,我抛出未经检查的异常“抛出新的RuntimeException(”test“);”而faultstring是“内部错误”而不是“测试”。有任何想法吗? – ctomek