【问题标题】:Is it possible to handle User Defined Exception using JAX WS Dispatch API?是否可以使用 JAX WS Dispatch API 处理用户定义的异常?
【发布时间】:2009-12-28 17:09:21
【问题描述】:

我正在使用以下代码 sn-p 执行动态 Web 服务调用:

    JAXBContext jc = getJAXBContext(requestClass, responseClass, jaxbContextExtraClasses);
    Dispatch<Object> dispatch = service.createDispatch(portQName, jc, Service.Mode.PAYLOAD);

    Object requestValue = getRequestValue(requestClass, pOrderedParameters);
    JAXBElement<?> request =
            new JAXBElement(new QName(serviceQNameStr, pOperationName), requestValue.getClass(), null, requestValue);
    Object tmpResponse = dispatch.invoke(request);

调用工作完美,除非我在服务上添加用户定义的异常(基本的 UserException 扩展 java.lang.Exception)。

首先我得到:

javax.xml.bind.UnmarshalException: 意想不到的元素 (uri:"http://schemas.xmlsoap.org/soap/envelope/", 本地:“故障”)。预期的元素是 http://my.namespace/}myMethod>,http://my.namespace/}myResponse>

然后我将 UserException_Exception JAX-WS 生成的类型添加到我的 JAXB Context 中,然后得到:

原因:com.sun.xml.bind.v2.runtime.IllegalAnnotationsException:1 个 IllegalAnnotationExceptions 计数 java.lang.StackTraceElement 没有无参数默认构造函数。 此问题与以下位置有关: 在 java.lang.StackTraceElement 在公共 java.lang.StackTraceElement[] java.lang.Throwable.getStackTrace() 在 java.lang.Throwable 在 java.lang.Exception

我找到的唯一可用解决方案是:

  • 直接发送 Soap 消息并直接处理 Soap 故障(这是 Jboss JAX-WS 实现使用服务接口执行标准 JAX-WS 调用的方式)。这对我来说不是一个可用的解决方案,我想使用高级实现(我越接近 Soap 消息,我的代码就越不动态)
  • 使用 JAXBRIContext.ANNOTATION_READER,它是特定于实现的,对我来说不是可用的解决方案,以便将注释 java.lang.Exception 注释为 @XmlTransient

使用 JAX-WS 生成的标准客户端存根和使用诸如 Soap UI 之类的工具时,具有用户定义异常的服务可以很好地执行。当我在 JAXB 上下文中没有用户定义的异常工件时,以及在调用期间当我在 JAXB 上下文中添加那些不兼容 JAXB 的工件时,消息的反序列化会出现问题。

我在 Jboss 4.2.3.GA 中使用 Jboss WS webservice 堆栈

欢迎任何优雅的解决这个问题的方法!

【问题讨论】:

    标签: java exception-handling jaxb jax-ws jbossws


    【解决方案1】:

    您是否在添加异常时相应地修改了您的 WSDL,或者 WSDL 是从您的 SEI 生成的?那里是否为您的异常定义了故障元素?

    【讨论】:

    • 感谢您的回答,WSDL是从我的SEI生成的,操作中有一个异常的Fault元素: 如果我使用 JAX-WS 生成的存根执行调用,则会引发包含 ActionIdNotFoundExceptionDto bean 的 ActionIdNotFoundExceptionDto_Exception。这是我使用 dispatch 方法所期望的行为。
    猜你喜欢
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    相关资源
    最近更新 更多