web-dev-qa-db-ja.com

IllegalAnnotationException:2つのクラスが同じXML型名を持っています

JBoss 5およびJava 1.6でWebサービスを開発しています。この例外の原因は何ですか?以下に、簡略化されたWebサービスコードを示します。

@Stateless
@WebService()
public class AccountWS {

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

以下は、完全なスタックトレースです。

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
36
Rosdi Kasim

問題の原因を見つけました。

この問題は、JAX-WSが各メソッドのクラスを生成し、methodName + "Response"を連結することでクラス名が構築されるために発生します。私の場合、JAX-WSによって新しく生成されたクラスは、応答オブジェクトと同じ名前になります。

例:

@Stateless
@WebService()
public class AccountWS {

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

JAX-WSは、応答オブジェクトと同じ名前を持つWebメソッドCreateAccountResponseの新しいクラスcreateAccountを生成します。

解決:

応答オブジェクトとメソッドの名前が一致しないことを確認してください。同じことがメソッドパラメーターにも適用されます。

83
Rosdi Kasim

同じ名前(createAccountResponse)と同じ名前空間(http://kona.webservice.sif.unidata.com/)Javaタイプcom.unidata.sif.kona.account.message.CreateAccountResponseおよびcom.unidata.sif.webservice.kona.jaxws.CreateAccountResponse。 2つ目はWebMethodアノテーションによって「自動的に」生成されるため、メッセージ要素のXMLTypeアノテーションを簡単に変更できます。

解決するには、それらの1つに対してnameを変更するか、2つの分離された名前空間(メッセージ要素用とWS要求および応答コンポーネント用に1つ)を定義する必要があります。最後のアプローチ(2つの別々の名前空間)をお勧めします。

I.E:

1。メッセージ要素の名前の変更com.unidata.sif.kona.account.message.CreateAccountResponse

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

2。メッセージ要素(パッケージcom.unidata.sif.kona.account.message

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

別の解決策は、@WebMethod(operationName="differentFromMethodName")を使用することです。これにより、クライアントのインターフェイスメソッド名も変更されます。 JAX-WSは、SEIのメソッド名を使用して、wsgenとwsimportの両方のクラスを引き続き生成します。しかし、メッセージ要素クラスは、JAX_WS内部で生成されたものとは異なります。

Wsgenが生成したクラス(メッセージ要素クラス)には触れたくありませんでした。

4
Ajay

同じエラーが発生しましたが、@ XmlTypeアノテーション(ライブラリから取得)を使用してクラスを調整できなかったため、別の解決策は、次のコードをcom.unidata.sif.kona.account.message/package-info.Javaに提供することです

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