java jboss jaxb jbossws

java - IllegalAnnotationException: dos clases tienen el mismo nombre de tipo XML



jboss jaxb (4)

Encontré la causa de mi problema.

Este problema se produce porque JAX-WS genera una clase para cada método y el nombre de clase se construye concatenando methodName + "Response" . En mi caso, la nueva clase generada por JAX-WS tendrá el mismo nombre que mi objeto de respuesta.

Ejemplo:

@Stateless @WebService() public class AccountWS { @WebMethod() public CreateAccountResponse createAccount(@WebParam(name = "request") CreateAccountRequest request) { return null; } }

JAX-WS generará una nueva clase CreateAccountResponse para Web Method createAccount que tiene el mismo nombre que el objeto de respuesta.

Solución:

Asegúrese de que el nombre del objeto y método de respuesta no coincida. Lo mismo se aplica al parámetro de método también.

Estoy desarrollando un servicio web bajo JBoss 5 y Java 1.6. ¿Qué podría causar esta excepción? A continuación se muestra mi código de servicio web simplificado.

@Stateless @WebService() public class AccountWS { @WebMethod() public CreateAccountResponse createAccount(@WebParam(name = "request") CreateAccountRequest request) { return null; }

Y debajo está la traza completa de la pila.

16:19:03,421 ERROR [AbstractKernelController] Error installing to Real: name=vfsfile:/C:/Apps/jbdevstudio/jboss-eap/jboss-as/server/default/deploy/sif_esb.esb/ state=PreReal mode=Manual requiredState=Real org.jboss.deployers.spi.DeploymentException: Error during deploy: vfsfile:/C:/Apps/jbdevstudio/jboss-eap/jboss-as/server/default/deploy/sif_esb.esb/ at org.jboss.deployers.spi.DeploymentException.rethrowAsDeploymentException(DeploymentException.java:49) at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:177) at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1440) at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1158) at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1099) at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348) at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1633) at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:935) at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1083) at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:985) at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:823) at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553) at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:782) at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:702) at org.jboss.system.server.profileservice.repository.MainDeployerAdapter.process(MainDeployerAdapter.java:117) at org.jboss.system.server.profileservice.repository.ProfileDeployAction.install(ProfileDeployAction.java:70) at org.jboss.system.server.profileservice.repository.AbstractProfileAction.install(AbstractProfileAction.java:53) at org.jboss.system.server.profileservice.repository.AbstractProfileService.install(AbstractProfileService.java:403) at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348) at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1633) at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:935) at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1083) at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:985) at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:775) at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:540) at org.jboss.system.server.profileservice.repository.AbstractProfileService.registerProfile(AbstractProfileService.java:308) at org.jboss.system.server.profileservice.ProfileServiceBootstrap.start(ProfileServiceBootstrap.java:256) at org.jboss.bootstrap.AbstractServerImpl.start(AbstractServerImpl.java:461) at org.jboss.Main.boot(Main.java:221) at org.jboss.Main$1.run(Main.java:556) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.IllegalStateException: Cannot build JAXB context at org.jboss.ws.metadata.builder.jaxws.JAXWSMetaDataBuilder.createJAXBContext(JAXWSMetaDataBuilder.java:984) at org.jboss.ws.metadata.builder.jaxws.JAXWSWebServiceMetaDataBuilder.buildWebServiceMetaData(JAXWSWebServiceMetaDataBuilder.java:151) at org.jboss.ws.metadata.builder.jaxws.JAXWSServerMetaDataBuilder.setupProviderOrWebService(JAXWSServerMetaDataBuilder.java:50) at org.jboss.ws.metadata.builder.jaxws.JAXWSMetaDataBuilderEJB3.buildMetaData(JAXWSMetaDataBuilderEJB3.java:76) at org.jboss.wsf.stack.jbws.UnifiedMetaDataDeploymentAspect.start(UnifiedMetaDataDeploymentAspect.java:69) at org.jboss.wsf.framework.deployment.DeploymentAspectManagerImpl.deploy(DeploymentAspectManagerImpl.java:129) at org.jboss.wsf.container.jboss50.deployer.ArchiveDeployerHook.deploy(ArchiveDeployerHook.java:76) at org.jboss.wsf.container.jboss50.deployer.AbstractWebServiceDeployer.internalDeploy(AbstractWebServiceDeployer.java:60) at org.jboss.wsf.container.jboss50.deployer.WebServiceDeployerEJB.internalDeploy(WebServiceDeployerEJB.java:113) at org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.deploy(AbstractRealDeployer.java:50) at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:171) ... 29 more Caused by: org.jboss.ws.WSException: Failed to create JAXBContext at org.jboss.ws.core.jaxws.CustomizableJAXBContextFactory.createContext(CustomizableJAXBContextFactory.java:114) at org.jboss.ws.metadata.builder.jaxws.JAXWSMetaDataBuilder.createJAXBContext(JAXWSMetaDataBuilder.java:980) ... 39 more Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions Two classes have the same XML type name "{http://kona.webservice.sif.unidata.com/}createAccountResponse". Use @XmlType.name and @XmlType.namespace to assign different names to them. this problem is related to the following location: at com.unidata.sif.kona.account.message.CreateAccountResponse at private com.unidata.sif.kona.account.message.CreateAccountResponse com.unidata.sif.webservice.kona.jaxws.CreateAccountResponse._return at com.unidata.sif.webservice.kona.jaxws.CreateAccountResponse this problem is related to the following location: at com.unidata.sif.webservice.kona.jaxws.CreateAccountResponse at com.sun.xml.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:102) at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:448) at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:297) at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:139) at com.sun.xml.bind.api.JAXBRIContext.newInstance(JAXBRIContext.java:105) at org.jboss.ws.core.jaxws.CustomizableJAXBContextFactory.createContext(CustomizableJAXBContextFactory.java:108) ... 40 more


Obtuve el mismo error pero no pude ajustar las clases con la anotación @XmlType (proveniente de la biblioteca). Otra solución es proporcionar una com.unidata.sif.kona.account.message/package-info.java con el siguiente código en el interior

@javax.xml.bind.annotation.XmlSchema(namespace = "http://kona.webservice.sif.unidata.com/") package com.sopra.banking.processengine.servicecontract.v1_1.dto;


Otra solución es usar @WebMethod(operationName="differentFromMethodName") . Esto incluso cambiará el nombre del método de interfaz en el cliente. JAX-WS aún genera las clases para wsgen y wsimport usando el nombre del método SEI; pero ahora las clases del elemento del mensaje son diferentes a las JAX_WS generadas internamente.

No quería tocar las clases generadas por wsgen (clases de elemento de mensaje).


Tiene dos elementos de esquema XML con el mismo nombre ( createAccountResponse ) y el mismo espacio de nombres ( http://kona.webservice.sif.unidata.com/ ) correspondiente a los tipos de Java com.unidata.sif.kona.account.message.CreateAccountResponse y com.unidata.sif.webservice.kona.jaxws.CreateAccountResponse . Como el segundo es "automaticamente" generado por la anotación WebMethod, será más fácil cambiar la anotación XMLType para el elemento de mensaje.

Para resolverlo, debe cambiar el name de uno de ellos o definir dos espacios de nombres separados (uno para los elementos de mensaje y otro para los componentes de solicitud y respuesta de WS). Recomiendo el último enfoque (dos espacios de nombres separados).

ES DECIR:

1. Cambiar el nombre del elemento de mensaje com.unidata.sif.kona.account.message.CreateAccountResponse .

@XMLType(name="CreateAccountResponseMsg", namespace="http://kona.webservice.sif.unidata.com")

2. Cambiar el espacio de nombres en los elementos del mensaje (paquete com.unidata.sif.kona.account.message )

@XMLType(name="CreateAccountResponse", namespace="http://kona.webservice.sif.unidata.com/message")