CXF 和 JBoss 6.4:两个类具有相同的 XML 类型名称



我在将我的 CXF 项目部署到 JBoss EAP 6.4 时遇到了一个问题,其他人似乎没有解决这个问题。

我在尝试部署时收到以下堆栈跟踪:

14:02:08,701 ERROR [org.springframework.web.context.ContextLoader] (ServerService Thread Pool -- 119) Context initialization failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'AdminServices': Invocation of init method failed; nested exception is javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException
    (snip)
Caused by: javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException
    (snip)
Caused by: org.apache.cxf.service.factory.ServiceConstructionException
    at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:329) [cxf-rt-databinding-jaxb-3.1.13.jar:3.1.13]
    at org.apache.cxf.service.factory.AbstractServiceFactoryBean.initializeDataBindings(AbstractServiceFactoryBean.java:86) [cxf-core-3.1.13.jar:3.1.13]
    at org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:470) [cxf-rt-wsdl-3.1.13.jar:3.1.13]
    at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromClass(JaxWsServiceFactoryBean.java:696) [cxf-rt-frontend-jaxws-3.1.13.jar:3.1.13]
    at org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:530) [cxf-rt-wsdl-3.1.13.jar:3.1.13]
    at org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:263) [cxf-rt-wsdl-3.1.13.jar:3.1.13]
    at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:199) [cxf-rt-frontend-jaxws-3.1.13.jar:3.1.13]
    at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:103) [cxf-rt-frontend-simple-3.1.13.jar:3.1.13]
    at org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:168) [cxf-rt-frontend-simple-3.1.13.jar:3.1.13]
    at org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:211) [cxf-rt-frontend-jaxws-3.1.13.jar:3.1.13]
    at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:460) [cxf-rt-frontend-jaxws-3.1.13.jar:3.1.13]
    at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:338) [cxf-rt-frontend-jaxws-3.1.13.jar:3.1.13]
    ... 32 more
Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 208 counts of IllegalAnnotationExceptions
Two classes have the same XML type name "{http://app.application.com/adminServices}addCatalog". Use @XmlType.name and @XmlType.namespace to assign different names to them.

(样本(

Two classes have the same XML type name "{http://app.application.com/adminServices}updateQuantityAllocationResponse". Use @XmlType.name and @XmlType.namespace to assign different names to them.
this problem is related to the following location:
    at com.jason.app.control.jaxws_asm.UpdateQuantityAllocationResponse
this problem is related to the following location:
    at com.jason.app.adminservices.UpdateQuantityAllocationResponse
    at public javax.xml.bind.JAXBElement com.jason.app.adminservices.ObjectFactory.createUpdateQuantityAllocationResponse(com.jason.app.adminservices.UpdateQuantityAllocationResponse)
    at com.jason.app.adminservices.ObjectFactory

我不认识 com.jason.app.control.jaxws_asm 软件包,并且它不存在于我正在部署的 EAR 文件中。这对我来说意味着 JBoss 正在做某事,但我不知道是什么。

我的 jboss-deployment-structure.xml 很简单,只排除了内置的 Web 服务子系统,因为我使用的是更现代的 CXF 版本。

<?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">  <ear-subdeployments-isolated>false</ear-subdeployments-isolated>    <deployment>        <exclude-subsystems>            <subsystem name="webservices" />        </exclude-subsystems>   </deployment> </jboss-deployment-structure>

我对这个问题完全感到困惑。如果有人能帮忙,我将不胜感激。如果需要,我将发布更多信息。

我假设你定义了这个类:at com.jason.app.adminservices.UpdateQuantityAllocationResponse

在您的 WS 中,您可能有一个包含如下内容的方法:@WebMethod//在 WS 中公开为操作@ResponseWrapper(localName = ">UpdateQuantityAllocation"(//这是响应中的包装元素

CXF/JAXB 生成此类:at com.jason.app.control.jaxws_asm.更新数量分配响应

因此,您最终会得到 2 个具有相同名称的类。

对我来说也发生了同样的事情,就我而言,我从另一个项目(对于同一个 WS(复制粘贴了生成的客户端类,但包是不同的。IDE 自动修复了 JAVA 标头中的包,但不会更改@ResponseWrapper属性中的字符串。

相关内容

  • 没有找到相关文章

最新更新