Java 在不更改WSDL文件的情况下添加soap错误?

Java 在不更改WSDL文件的情况下添加soap错误?,java,web-services,wsdl,jax-ws,soapfault,Java,Web Services,Wsdl,Jax Ws,Soapfault,我想向JAX-WSWeb服务添加一些SOAP错误,但我不想更改WSDL模式的内容。据我所知,我必须使用annotation@WebFault来定义SOAP故障,它会在下一次构建期间自动导致WSDL中的更改。有没有办法在不更改WSDL方案内容的情况下使用SOAP错误?当您从代码中抛出异常时,JAX-WS会在响应中自动将其映射到SOAP错误。不需要在WSDL中定义错误 在WSDL文件中使用@WebFault或定义元素用于声明特定操作可能返回自定义SOAP错误 @WebFault肯定会在生成的WSDL

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

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

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

@WebFault
肯定会在生成的WSDL中添加一个
元素

总而言之,抛出异常将在soap响应中插入一个元素

更新

自定义错误字符串:

作为参数传递给
异常
构造函数的字符串消息表示
中的faultstring元素。例如:

throw new Exception("This is the faultstring text");
导致soap响应中出现错误:

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

使用soapui测试您的web服务。我刚刚测试了我的,在异常中使用自定义消息,当我看到来自Soap Ui的响应时,我看到错误字符串有我的自定义消息。

好,但是如果我想更改faultcode和faultstring怎么办?我更新了答案。您可以自定义faultstring,但不能自定义带有java异常的faultcode。如果我抛出checked exception,那么我必须通过添加“throws”子句来更改我的webmethod的签名,因此我必须更改我的web方法的接口,以便在不对web服务接口进行重大更改的情况下,不可能仅仅抛出checked exception。正如我发现的,在这种情况下,我必须抛出未检查的异常。但当我抛出RuntimeException时,它仍然不能像预期的那样工作,我抛出未经检查的异常“抛出新的RuntimeException(“test”);”并且faultstring是“内部错误”而不是“test”。有什么想法吗?我正在使用Axis框架处理SOAP消息,AxisFault似乎覆盖了我的SOAP错误。这变得很棘手,我从来都不喜欢Axis。因此,您需要抛出一个未经检查的异常,并且当Axis将其包装为AxisFault时,它不会覆盖消息。。。当您抛出选中的异常时,我认为Axis无论如何都会将其包装在AxisFault中,但它不会覆盖消息。然后我会尝试使用另一种类型的未检查异常,希望Axis逻辑不会覆盖该异常的消息。尝试使用Error类:“抛出新错误(“test”);”并查看它是如何运行的。
<detail>
    <MyCustomException>
        <message>custom message</message>
    </MyCustomException>
</detail>