加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

CXF之"@XmlType.name 和 @XmlType.namespace 为类分配不同的

发布时间:2020-12-17 00:38:16 所属栏目:安全 来源:网络整理
导读:情景描述:在我的webservice服务中,要调用远程写好的一个服务;由于我的后台是用CXF方式开发的,所以调用远程的方式采用的是由wsdl生成本地代理接口来实现的,生成本地接口的代码如下: F:jar包驱动apache-cxf-2.6.0binwsdl2java -p com.dyc.client -d d

情景描述:在我的webservice服务中,要调用远程写好的一个服务;由于我的后台是用CXF方式开发的,所以调用远程的方式采用的是由wsdl生成本地代理接口来实现的,生成本地接口的代码如下:

F:jar包驱动apache-cxf-2.6.0bin>wsdl2java -p com.dyc.client -d d:/ws -verbose http://localhost:7000/gisplatform/SpatialAnalysisService?wsdl 

然后将生成的在ws目录下的源文件COPY到我的工程中调用,报下面错误

信息: Creating Service {http://www.sgcc.com.cn/sggis/service/gisservice}SpatialAnalysisServiceService from class cn.creaway.webgis.proxy.SpatialAnalysisService
Exception in thread "main" org.apache.cxf.service.factory.ServiceConstructionException
	at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:297)
	at org.apache.cxf.service.factory.AbstractServiceFactoryBean.initializeDataBindings(AbstractServiceFactoryBean.java:86)
	at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:474)
	at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromClass(JaxWsServiceFactoryBean.java:685)
	at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:536)
	at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:248)
	at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:205)
	at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:101)
	at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:90)
	at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:155)
	at org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:156)
	at cn.creaway.webgis.business.SpatialAnalysisServiceBusiness.computeUserLineLengthStatisticByDept(SpatialAnalysisServiceBusiness.java:71)
	at cn.creaway.webgis.business.SpatialAnalysisServiceBusiness.main(SpatialAnalysisServiceBusiness.java:85)
Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 3 counts of IllegalAnnotationExceptions
两个类具有相同的 XML 类型名称 "{http://www.sgcc.com.cn/sggis/service/gisservice}computePSRStatisticByDept"。请使用 @XmlType.name 和 @XmlType.namespace 为类分配不同的名称。
	this problem is related to the following location:
		at cn.creaway.webgis.proxy.jaxws_asm.ComputePSRStatisticByDept
	this problem is related to the following location:
		at cn.creaway.webgis.proxy.ComputePSRStatisticByDept
		at public cn.creaway.webgis.proxy.ComputePSRStatisticByDept cn.creaway.webgis.proxy.ObjectFactory.createComputePSRStatisticByDept()
		at cn.creaway.webgis.proxy.ObjectFactory
两个类具有相同的 XML 类型名称 "{http://www.sgcc.com.cn/sggis/service/gisservice}computeLineLengthStatisticByDeptResponse"。请使用 @XmlType.name 和 @XmlType.namespace 为类分配不同的名称。
	this problem is related to the following location:
		at cn.creaway.webgis.proxy.jaxws_asm.ComputeLineLengthStatisticByDeptResponse
	this problem is related to the following location:
		at cn.creaway.webgis.proxy.ComputeLineLengthStatisticByDeptResponse
		at public cn.creaway.webgis.proxy.ComputeLineLengthStatisticByDeptResponse cn.creaway.webgis.proxy.ObjectFactory.createComputeLineLengthStatisticByDeptResponse()
		at cn.creaway.webgis.proxy.ObjectFactory
两个类具有相同的 XML 类型名称 "{http://www.sgcc.com.cn/sggis/service/gisservice}computePSRStatisticByDeptResponse"。请使用 @XmlType.name 和 @XmlType.namespace 为类分配不同的名称。
	this problem is related to the following location:
		at cn.creaway.webgis.proxy.jaxws_asm.ComputePSRStatisticByDeptResponse
	this problem is related to the following location:
		at cn.creaway.webgis.proxy.ComputePSRStatisticByDeptResponse
		at public cn.creaway.webgis.proxy.ComputePSRStatisticByDeptResponse cn.creaway.webgis.proxy.ObjectFactory.createComputePSRStatisticByDeptResponse()
		at cn.creaway.webgis.proxy.ObjectFactory

	at com.sun.xml.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:106)
	at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:466)
	at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:298)
	at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:141)
	at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1163)
	at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:145)
	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:211)
	at javax.xml.bind.ContextFinder.find(ContextFinder.java:372)
	at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574)
	at org.apache.cxf.common.jaxb.JAXBContextCache$2.run(JAXBContextCache.java:268)
	at org.apache.cxf.common.jaxb.JAXBContextCache$2.run(JAXBContextCache.java:267)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.apache.cxf.common.jaxb.JAXBContextCache.createContext(JAXBContextCache.java:266)
	at org.apache.cxf.common.jaxb.JAXBContextCache.getCachedContextAndSchemas(JAXBContextCache.java:172)
	at org.apache.cxf.jaxb.JAXBDataBinding.createJAXBContextAndSchemas(JAXBDataBinding.java:427)
	at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:295)
	... 12 more

开始一直怀疑是因为我项目中的服务名与我调用的服务名之间有冲突,根据异常信息很容易让人如此思考;后来无意中打开一个接口文发现,原来我COPY到工程中时,包的路径改变了,而原接口引用的类路径却还是我生成时用的目录,如下:

......................................................  
@ResponseWrapper(localName = "computePSRStatisticByDeptResponse",targetNamespace = "http://www.sgcc.com.cn/sggis/service/gisservice",className = "com.dyc.client.ComputePSRStatisticByDeptResponse")  
    public java.lang.String computePSRStatisticByDept(  
            @WebParam(name = "InputXML",targetNamespace = "") java.lang.String inputXML);  
.......................................................  

可以发现我的className一直引用的是我原来的包名,而我现在的包名是cn.gary.test

?

修改方法,改接口显然不实际,所以重新生成接口,修改命令为:


F:jar包驱动apache-cxf-2.6.0bin>wsdl2java -p cn.gary.test -d d:/ws -verbose http://localhost:7000/gisplatform/SpatialAnalysisService?wsdl  

再将生成的接口COPY到相同的接口下,就不会再报错了。

总结:同样的异常也有可能别的原因引起的,这里只是其中一种可能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读