今天遇到一个问题,webservice发布的时候报下面的错误:
Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions Two classes have the same XML type name "{http://xxx.yyyy.com}createProcessResponse". Use @XmlType.name and @XmlType.namespace to assign different names to them. this problem is related to the following location: at xxx.yyy.gwfp.ws.dto.CreateProcessResponse at private xxx.yyy.gwfp.ws.dto.CreateProcessResponse xxx.yyy.gwfp.ws.jaxws_asm.CreateProcessResponse._return at xxx.yyy.gwfp.ws.jaxws_asm.CreateProcessResponse this problem is related to the following location: at xxx.yyy.gwfp.ws.jaxws_asm.CreateProcessResponse at com.sun.xml.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:102) at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:472) at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:302) at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1140) at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:154) at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:121) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:202) at javax.xml.bind.ContextFinder.find(ContextFinder.java:363) at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574) at org.apache.cxf.jaxb.JAXBDataBinding.createContext(JAXBDataBinding.java:562) at org.apache.cxf.jaxb.JAXBDataBinding.createJAXBContextAndSchemas(JAXBDataBinding.java:502) at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:322)
代码如下:
@Stateless @WebService() public class AccountWS { @WebMethod() public CreateProcessResponse createProcess(@WebParam(name = "request") CreateProcessRequest request) { return null; }
起初找不出来原因,后来才发现,由于JAX-WS对webservice里面得每个方法都生成一个类,生成的类名为: methodName
+ "Response",所以就回导致生成的类和原来的类有两个相同的xml type。
知道原因后,除了我们修改方法名外,还有下面的3种解决方法:
- 更换返回值对象的name
@XMLType(name="CreateProcessResponseMsg", namespace="http://xxx.yyy.com")
- 更换返回值对象的namespace
@XMLType(name="CreateProcessResponse", namespace="http://xxx.yyy.com/message")
- 给方法上加上下面的注解
@WebMethod(operationName="differentFromMethodName")
其实在最开始的时候说生成的class的名称是方法名+Response,是不准确的,operationName的默认值就是方法名,其实就是operationName+Response, 这个注解其实会改变生成的类的名称,对接口是没有影响的.
相关推荐
《易语言文本排错工具详解》 易语言,作为一款以“中国人自己的编程语言”为目标设计的编程工具,以其简洁的语法和贴近自然语言的特点,深受广大编程爱好者的喜爱。在编程过程中,文本处理是一项基础且重要的任务,...
"cisco packet tracer排错实验集合"是一个针对网络初学者和专业人员的宝贵资源,包含了26个精心设计的实验,覆盖了各种网络排错场景。 实验一至二十五:这些实验可能分别涵盖了不同的网络问题,例如路由问题、...
在IT行业中,排错是每个专业开发者和技术支持人员必须掌握的关键技能。华为作为全球领先的通信技术公司,其内部培训教程“华为排错专家”无疑是学习和提升这一技能的重要资源。本教程涵盖了多种技术栈,包括ASP.NET...
在Linux系统中进行故障排查是一项重要且复杂的技能,它要求系统管理员对Linux系统有深入的理解,并掌握多种诊断和排错工具。以下是从给定文件中提取的Linux排错相关知识点。 首先,故障分类是排错的第一步,它有助...
路由器故障排错入门 路由器故障排错入门
CCIE-LAB考试排错(上) 很详细的考试说明与实例
路由交换理论排错讲解
50种电脑排错,很简单的,看看照着操作就能懂
cacti的安装 cacti的维护 cacti的排错
【Windows编程高效排错】这篇文章主要探讨了在Windows环境下如何高效地进行用户态程序的调试与问题解决。作者熊力通过一系列的实际案例,分享了排错的方法、技巧和经验。 文章首先强调了排错的重要性,指出无论是...
在电脑使用过程中,遇到问题和故障是常有的事情,这时我们就需要借助一些排错命令来诊断和解决问题。本文将详细讲解几个常用的电脑排错命令及其应用,并简要介绍压缩包中包含的相关工具。 1. **命令提示符(CMD)与...
### Windows用户态程序排错——重要知识点解析 #### 一、引言 在软件开发、测试及技术支持领域,遇到程序行为不符合预期的情况是家常便饭。这些情况往往需要我们运用排错技巧来定位问题所在并加以解决。《Windows...
活动目录排错必读文档,活动目录排错必读文档 关方的KB等等.
Centos7网卡报错排错解决Word
华为排错专家教程 华为排错专家教程 华为排错专家教程
### OSPF故障排错流程详解 #### 一、引言 开放最短路径优先协议(Open Shortest Path First,简称OSPF)作为一种基于链路状态的动态路由协议,在现代网络中广泛应用于大型企业网络和互联网服务提供商(ISP)中。由于...
然而,任何复杂的系统都可能遇到问题,当Oracle数据库出现错误时,有效的排错和恢复策略至关重要。"Oracle排错流程图"提供了这样的指导,帮助DBA(数据库管理员)快速定位和解决可能出现的问题。 该流程图由资深的...
oracle数据库备份恢复排错指南
在开发过程中,遇到错误是常态,而掌握高级排错技巧能显著提高开发效率和问题解决能力。本篇文章将深入探讨ASP.NET中的高级排错技巧。 一、调试工具的使用 1. Visual Studio IDE 内置调试器:Visual Studio 提供了...
很有参考价值一份排错报告,H3CTE考试满分1000分,其中排错报告300分,写好报告是关键的一部分。