Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >JAX-WS -将异常映射到故障

JAX-WS -将异常映射到故障
EN

Stack Overflow用户
提问于 2010-01-14 13:45:39
回答 2查看 44.5K关注 0票数 27

我正在使用JAX WS公开一个WebService。此服务的某些操作可能会产生异常。不是内部服务器异常,而是依赖于操作调用的输入参数的异常。

如果我指定我的操作抛出一个自定义异常,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@WebService
@SOAPBinding(style = Style.RPC, use = Use.LITERAL)
public class MyServiceEndpointImpl implements MyServiceEndpoint {

    @WebMethod
    public void throwsException throws InvalidInputException;
}

在运行应用程序时,我得到了以下堆栈跟踪:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 com.sun.xml.ws.model.RuntimeModelerException: runtime modeler error: Wrapper class com.mypackage.ws.services.jaxws.InvalidInputExceptionBean is not found. Have you run APT to generate them?
    at com.sun.xml.ws.model.RuntimeModeler.getClass(RuntimeModeler.java:285)
    at com.sun.xml.ws.model.RuntimeModeler.processExceptions(RuntimeModeler.java:1006)
    at com.sun.xml.ws.model.RuntimeModeler.processRpcMethod(RuntimeModeler.java:969)
    at com.sun.xml.ws.model.RuntimeModeler.processMethod(RuntimeModeler.java:546)
    at com.sun.xml.ws.model.RuntimeModeler.processClass(RuntimeModeler.java:370)
    at com.sun.xml.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:256)
    at com.sun.xml.ws.server.EndpointFactory.createSEIModel(EndpointFactory.java:322)
    at com.sun.xml.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:188)
    at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:467)
    at org.jvnet.jax_ws_commons.spring.SpringService.getObject(SpringService.java:333)
    at org.jvnet.jax_ws_commons.spring.SpringService.getObject(SpringService.java:45)
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport$1.run(FactoryBeanRegistrySupport.java:121)

InvalidInputException添加@XmlRootEntity并不能解决问题。

如果这不是通过web服务报告故障的推荐方法,那么有没有更好的方法?我的异常是否应该继承自RuntimeException,并依赖于错误处理的传输(即,一切都将最终包装在SOAPException中)?我希望是像Spring-WS的SoapFaultAnnotationExceptionResolver这样的东西。JAX-WS是否提供了类似的功能?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-14 14:22:25

你有没有尝试用@WebFault注释你的异常?另外,您是否实现了getFaultInfo()

编辑:我意识到我的答案可能还不够详细。正如在this thread中所提醒的(例如):

JAX-WS2.0规范要求用@WebFault注释的异常必须有两个构造函数和一个方法getter才能获得故障信息:

WrapperException(String message,FaultBean faultInfo) WrapperException(String message,FaultBean faultInfo,Throwable cause) FaultBean getFaultInfo()

WrapperException将替换为异常的名称,FaultBean将替换为实现错误bean的类名。故障bean是一个包含故障信息的Java bean,Web服务客户端使用它来了解故障的原因。

JAX-WS规范的2.5节故障中详细介绍了这一点。您的异常是否符合此要求?你能把代码贴出来吗?

行动是对的。根据规范2.1,第3.7节服务特定异常,不需要使用@WebFault注释,JAX-WS可以为与第2.5节中描述的模式不匹配的异常动态生成包装器bean(只需为您希望出现在错误中的信息提供一个getter )。对于与2.5节中描述的模式匹配的异常(即具有getFaultInfo方法和@WebFault注释的异常),在将异常映射到XML Schema时,FaultBean用作JAXB的输入。

因此,上面建议的解决方案(与2.5节中描述的模式匹配)只是一种变通方法。包装器bean的生成应该只适用于其他异常。我不知道为什么这里会失败。

票数 27
EN

Stack Overflow用户

发布于 2010-01-14 17:10:48

这是对上面答案的补充。我最终将其作为我的InvalidInputException实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@WebFault(faultBean = "com.mypackage.ws.exception.FaultBean")
public class InvalidInputException extends Exception {

    private static final long serialVersionUID = 1L;

    private FaultBean faultBean;

    public InvalidInputException() {
        super();
    }

    public InvalidInputException(String message, FaultBean faultBean, Throwable cause) {
        super(message, cause);
        this.faultBean = faultBean;
    }

    public InvalidInputException(String message, FaultBean faultBean) {
        super(message);
        this.faultBean = faultBean;
    }

    public FaultBean getFaultInfo() {
        return faultBean;
    }
}

FaultBean只是一个简单的POJO,目前根本没有数据。现在,根据JAX-WS规范(请参阅3.7特定于服务的异常),它符合使用@WebFault注释的异常的要求,因此它不会为它创建包装器bean,这可能就是失败的原因。

这是一个不错的解决方法,但它不能解释问题中的错误。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2064447

复制
相关文章
将爬取的数据保存到mysql中
      create database scrapy (我新建的数据库名称为scrapy)
py3study
2020/01/19
3.7K0
将存储过程执行的结果保存到临时表
CREATE PROCEDURE Proc1 @a varchar(50) AS SELECT Id, NAME FROM Table1 WHERE NAME=@a GO
全栈程序员站长
2022/07/15
1.7K0
MySQL批量更改数据库表结构字符集
# 根据转换字符集 修改 utf8mb4 ---> utf8mb4_general_ci SELECT CONCAT( 'ALTER TABLE ', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;' ) FROM information_schema.`TABLES` WHERE TABLE_SCHEMA = 'DATABASE_NAME'; # 更改 DATABASE_NAME
用户7657330
2021/12/07
4K0
使用python将csv文件快速转存到mysql
因为一些工作需要,我们经常会做一些数据持久化的事情,例如将临时数据存到文件里,又或者是存到数据库里。
我被狗咬了
2019/09/23
6.3K0
使用python将csv文件快速转存到mysql
JavaScript 使用 for 循环时出现的问题
有一些项目组在定位问题的时候发现,在使用 “for(x in array)” 这样的写法的时候,在 IE 浏览器下,x 出现了非预期的值。
四火
2022/07/15
4K0
JavaScript 使用 for 循环时出现的问题
运行basenji框架时出现的问题
2.分不清哪个是输入,输出是什么。另外每个数据集对应的参数param.json文件对应的什么
bye
2021/03/22
2.4K0
运行basenji框架时出现的问题
mysql数据库(6):将数据装入表中
mysql> INSERT INTO pet -> VALUES('hanhan','川川','hh','f','2021-7-21',NULL);
川川菜鸟
2021/10/18
3.1K0
SQLserver2019当保存时出现不允许保存更改,阻止保存要求重新创建表的更改解决方案。
第一步:工具→选项 2,取消勾选
SingYi
2022/07/14
1.6K0
SQLserver2019当保存时出现不允许保存更改,阻止保存要求重新创建表的更改解决方案。
更改 WordPress 数据库表名前缀
众所周知,WordPress 在安装时候可以选择表名前缀以在同一数据库安装多个WordPress 程序。但是很多空间商,尤其是老外的虚拟主机商 允许建立多个数据库,这样为了便于管理,很多人在安装多个WordPress 程序的时候选择多个数据库而不是修改表名前缀,当然这样的方式也是被提倡的。 所谓天有不测风云,人有旦夕祸福。如若碰到多个数据库合为单个数据库的时候,头疼事情就来了,这种情况往往在从国外往国内搬的时候,国内空间商不知道为何如此吝啬 🙁 table_prefix = ‘wp_’; 改为 既
Denis
2023/04/13
1.6K0
MYSQL分页查询时没有用ORDER BY出现数据重复的问题
产品反馈,用户在使用分页列表时,出现数据重复的问题,查看代码后发现对应的分页SQL并没有使用order by进行排序,但是印象中Mysql的InnoDB引擎会默认按照主键id进行排序,本地测试了一下的确出现了部分数据在不同的页都出现的问题。
翎野君
2023/05/12
1.7K0
MYSQL分页查询时没有用ORDER BY出现数据重复的问题
MySQL更改数据库名
执行上述shell脚本 chmod +x ./test.sh #使脚本具有执行权限 ./test.sh #执行脚本
用户10325771
2023/03/01
5.2K0
java 安装配置时出现的问题
Error: could not open `C:\Program Files\Java\jre6\lib\i386\jvm.cfg') jdkerror  前些日子装了个jdk7试了试,后来做项目需要换成jdk6,安装完jdk6,设置完环境变量后出现问题。运行java -version出现Error: could not open `C:\Program Files\Java\jre7\lib\i586\jvm.cfg'),运行javac -version则是正常的javac 1.6.0_32。googl
Gxjun
2018/03/22
2.2K0
Ubuntu安装时出现黑屏问题的解决
问题描述:Ubuntu使用光盘/USB安装时,出现"install ubuntu/ try ubuntu without installation"选择,但是Enter安装时,显示器显示没有信息,进行休眠
知忆
2021/06/07
13.9K0
【已解决】如果将MySQL数据库中的表生成PDM
有时候,我们需要MySQL数据库中的表生成对应的PDM文件,这里凯哥就讲讲第一种将MySQL数据库的表生成对应的PDM文件。
凯哥Java
2023/07/31
4740
【已解决】如果将MySQL数据库中的表生成PDM
Mysql - 删除表时出现: Cannot delete or update a parent row: a foreign key constraint fails
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails
小菠萝测试笔记
2020/06/09
2K0
ASP.NET将Session保存到数据库中
因为ASP.NET中Session的存取机制与ASP相同,都是保存在进行中, 一旦进程崩溃,所有Session信息将会丢失,所以我采取了将Session信息保存到SQL Server中,尽管还有其它的 几个方式(本文不作介绍),要将Session保存到SQL Server中,需要有以下几个步骤: 1.首先要创建用于保存Session数据的数据库,以命令行的形式用aspnet_regsql.exe来完成,具体命令为 C:\WINDOWS\Microsoft.NET\Framework\v2.0.5072
磊哥
2018/04/26
2.6K0
爬取网站文章将图片保存到本地并将HTML的src属性更改到本地
每次当你爬取一篇文章时,不管是从csdn或者其他网站,基本内容都是保存在一个富文本编辑器中,将内容提取出来还是一个html,保存之后图片还在别人的图片服务器上。我今天要说的就是将图片保存之后并将它的src属性替换成本地的地址。并且以次替换,按照原文章排版顺序替换。
andrew_a
2019/07/30
1.9K0
MYSQL 生产环境字段更改的failed的问题
早上看到微信一个银行的同学问了小问题,希望他不要背锅,具体问题是MYSQL 一个50G的表要更改字段,将一个字段从varchar(3) 改成varchar(6). MYSQL 5.7 官版。因为根据官方和在测试系统测试的结果来看,不应该是缓慢的,应该是很快完成的。
AustinDatabases
2020/06/05
1.9K0
上传文件时出现跨域问题
所以啊,这根本不是跨域的问题,Tomcat默认上传的文件大小就是1MB,你上传的文件超过而已。
乐心湖
2020/07/31
3.6K0
上传文件时出现跨域问题
点击加载更多

相似问题

Regex替换引号之间的值

10

使用regex替换url

12

使用Javascript和Regex替换括号之间的值

14

使用Regex替换url路径

16

使用regex替换URL的位置?

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文