2010-11-23 36 views
28

Estoy desarrollando un servicio web con 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.IllegalAnnotationException: Dos clases tienen el mismo nombre de tipo XML

@Stateless 
@WebService() 
public class AccountWS { 

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

Y a continuación se muestra el seguimiento de la pila completa.

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 

Respuesta

73

he encontrado la causa de mi problema.

Este problema se debe a que JAX-WS genera una clase para cada método y el nombre de la 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 el Método Web createAccount que tiene el mismo nombre que el objeto de respuesta.

Solución:

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

+9

+1 para compartir la solución correcta (y información muy útil sobre JAX-WS) –

9

usted tiene dos elementos de esquema XML con el mismo nombre (createAccountResponse) y el mismo espacio de nombres (http://kona.webservice.sif.unidata.com/) que corresponden 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 por 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).

I.E:

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. Cambio del espacio de nombres a los elementos del mensaje (paquete com.unidata.sif.kona.account.message)

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

Eso es lo que la pila Trace está tratando de decirme que creo.Pero lo que no entiendo es por qué mis otros servicios web no arrojan esta excepción. He comparado con los otros servicios web y el código es más o menos similar. –

+0

Con la información que tengo, no puedo decirte el motivo de este comportamiento diferente. Lo siento. –

+0

Encontré la causa ... pago mi respuesta. –

2

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).

2

me dieron el mismo error pero no pude ajust las clases con anotación @XmlType (procedente de la biblioteca) Así pues, otra solución es proporcionar una com.unidata.sif.kona.account.message/package-info.java siguiente código dentro de

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