当前位置: 首页 > 面试题库 >

如何在JAX-WS Web服务上引发自定义错误?

公羊兴文
2023-03-14
问题内容

如何在JAX-WS
Web服务上引发自定义的肥皂错误?我怎么可以指定faultCodefaultStringdetailSOAP错误的?是否可以设置detailas
bean而不是a的值String

请注意,我正在使用代码优先方法进行开发。


问题答案:

使用@WebFault注释。

您可以在Java JAX-WS
Web服务
中的使用SOAP错误和异常-Java上的Eben
Hewitt中看到一个很好的示例。

您将看到示例:

@WebFault(name="CheckVerifyFault",
    targetNamespace="http://www.example.com")
public class CheckVerifyFault extends Exception {

    /**
     * Java type that goes as soapenv:Fault detail element.
     */
    private CheckFaultBean faultInfo;

    public CheckVerifyFault(String message, CheckFaultBean faultInfo) {
        super(message);
        this.faultInfo = faultInfo;
    }

    public CheckVerifyFault(String message, CheckFaultBean faultInfo, 
           Throwable cause) {
        super(message, cause);
        this.faultInfo = faultInfo;
    }

    public CheckFaultBean getFaultInfo() {
        return faultInfo;
    }
}

更新

另一种方法是在子句中声明 典型的 异常throws

例如,假设以下是我的异常类:

package pkg.ex;

public class FooException extends Exception {

    public FooException(String message, Throwable cause) {
        super(message, cause);
    }

}

下一个类是服务实现。

package pkg.ws;

import javax.jws.WebService;
import pkg.ex.FooException;

@WebService(serviceName = "FooSvc")
public class FooService {

    public String sayHello(String name) throws FooException {
        if (name.isEmpty()) {
            Throwable t = new IllegalArgumentException("Empty name");
            throw new FooException("There is one error", t);
        }
        return "Hello, " + name;
    }

}

如果我的要求是:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
                  xmlns:ws="http://ws.pkg/">
   <soapenv:Header/>
   <soapenv:Body>
      <ws:sayHello>
         <arg0>Peter</arg0>
      </ws:sayHello>
   </soapenv:Body>
</soapenv:Envelope>

没有问题:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:sayHelloResponse xmlns:ns2="http://ws.pkg/">
         <return>Hello, Peter</return>
      </ns2:sayHelloResponse>
   </S:Body>
</S:Envelope>

但…

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
                  xmlns:ws="http://ws.pkg/">
   <soapenv:Header/>
   <soapenv:Body>
      <ws:sayHello>
         <arg0></arg0>
      </ws:sayHello>
   </soapenv:Body>
</soapenv:Envelope>

然后…

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope">
         <faultcode>S:Server</faultcode>
         <faultstring>There is one error</faultstring>
         <detail>
            <ns2:FooException xmlns:ns2="http://ws.pkg/">
               <message>There is one error</message>
            </ns2:FooException>
         </detail>
      </S:Fault>
   </S:Body>
</S:Envelope>


 类似资料:
  • 问题内容: 我正在使用Jersey来学习JAX-RS(又名JSR-311)。我已经成功创建了一个根资源,并且正在使用参数: 这很好用,并且可以处理Date(String)构造函数可以理解的当前语言环境中的任何格式(例如YYYY / mm / dd和mm / dd / YYYY)。但是,如果提供的值无效或无法理解,则会收到404响应。 例如: 如何自定义此行为?也许是不同的响应代码(可能是“ 400

  • 我不能对我的web服务的方法抛出异常。当我在我的方法中抛出异常并尝试从Soap UI测试我的应用程序时,会出现以下错误: 和 我的问题是: 如何为JavaWeb服务编写用户定义的异常? (例如,有一个方法返回一个学生的名字。但是,如果学生在数据库中找不到,会抛出一个错误?)

  • 我为构建自己的CVC(一个基于Rapaehl地图的choropleth地图)而努力,但现在我在尝试发布我的项目时面临着两个大问题。 1)CVC似乎无法正常使用子数据集:可以选择报表的子数据集之一,但它无法识别字段。

  • 我在一台Tomcat Web服务器上部署了多个Web应用程序。对于所有已部署的 Web 应用程序,如果任何 Web 应用程序中发生 404 错误,我希望显示相同的 404.jsp 页面。 一种方法是在每个 Web 应用程序的 Web 中放置一个条目 404.xml并为 404.jsp 提供适当的位置。 有没有办法让所有 Web 应用程序在 404 错误上显示 ROOT 的 404 页面? 谢谢,帕

  • 我在spring rest api上工作,我想确保一切都正常工作。我想记录异常行为数据库连接错误等等,我正在使用couchbase数据库,并在endpoint响应中获得例如此类异常:下一条消息:和一个非常长的跟踪。 为此,我在internet上找到了一个解决方案,即扩展ResponseEntityExceptionHandler并重写handleExceptionInternal方法,如下所示: