2010-11-23 17 views
28

मैं जेबॉस 5 और जावा 1.6 के तहत वेब सेवा विकसित कर रहा हूं। संभवतः इस अपवाद का कारण क्या हो सकता है? नीचे मेरा सरलीकृत वेब सेवा कोड है।अवैध अज्ञात अपवाद: दो वर्गों का एक ही एक्सएमएल प्रकार का नाम

@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 

उत्तर

73

मैं अपने इस समस्या का कारण मिल गया।

यह समस्या तब होती है क्योंकि जेएक्स-डब्ल्यूएस प्रत्येक विधि के लिए कक्षा उत्पन्न करता है और कक्षा का नाम methodName + "Response" को संयोजित करके बनाया गया है। मेरे मामले में, जेएक्स-डब्ल्यूएस द्वारा नव जेनरेटेड क्लास का मेरा जवाब ऑब्जेक्ट जैसा ही होगा।

उदाहरण:

@Stateless 
@WebService() 
public class AccountWS { 

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

JAX-WS वेब विधि createAccount जो प्रतिक्रिया वस्तु के रूप में एक ही नाम है के लिए एक नया वर्ग CreateAccountResponse उत्पन्न होगा।

समाधान:

सुनिश्चित करें कि प्रतिक्रिया ऑब्जेक्ट और विधि के नाम से मेल नहीं खाता बनाओ। विधि पैरामीटर पर भी वही बात लागू होती है।

+9

+1 (और जेएक्स-डब्ल्यूएस के बारे में बहुत उपयोगी जानकारी) –

9

आप एक ही नाम (createAccountResponse) और एक ही नाम स्थान (http://kona.webservice.sif.unidata.com/) जावा प्रकार com.unidata.sif.kona.account.message.CreateAccountResponse और com.unidata.sif.webservice.kona.jaxws.CreateAccountResponse करने के लिए इसी के साथ दो XML स्कीमा तत्वों की है। चूंकि दूसरा एक WebMethod एनोटेशन द्वारा उत्पन्न "automagicaly" है, इसलिए संदेश तत्व के लिए XMLType एनोटेशन को आसान बनाना आसान होगा।

इसे हल करने के लिए, आपको उनमें से किसी एक के लिए name बदलना चाहिए, या दो अलग-अलग नामस्थानों को परिभाषित करना चाहिए (संदेश तत्वों के लिए एक, और डब्ल्यूएस अनुरोध और प्रतिक्रिया घटकों के लिए दूसरा)। मैं अंतिम दृष्टिकोण (दो अलग-अलग नामस्थान) की अनुशंसा करता हूं।

यानी:

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") 
+0

निम्नलिखित कोड के साथ एक com.unidata.sif.kona.account.message/package-info.java प्रदान करना है के साथ कक्षाएं ajust नहीं कर सकता क्या ढेर है कि ट्रेस मुझे बताने की कोशिश कर रहा है मुझे विश्वास है।लेकिन मुझे समझ में नहीं आता है कि मेरी अन्य वेब सेवाएं इस अपवाद को क्यों नहीं फेंकती हैं .. मैंने अन्य वेब सेवाओं के खिलाफ जांच की है और कोड कम या समान है। –

+0

मेरे पास जो जानकारी है, मैं आपको इस अलग व्यवहार का कारण नहीं बता सकता। माफ़ कीजिये। –

+0

मुझे कारण मिला .. मेरा जवाब चेकआउट करें। सही समाधान साझा करने के लिए –

2

एक और समाधान @WebMethod(operationName="differentFromMethodName") का उपयोग करना है। यह क्लाइंट पर इंटरफ़ेस विधि नाम भी बदल देगा। जेएक्स-डब्ल्यूएस अभी भी एसईआई के विधि नाम का उपयोग कर wsgen और wsimport दोनों के लिए कक्षाएं उत्पन्न करता है; लेकिन अब संदेश तत्व वर्ग जेएक्स_डब्ल्यूएस आंतरिक रूप से जेनरेट किए गए लोगों से अलग हैं।

मैं wsgen जेनरेट किए गए वर्ग (संदेश तत्व वर्ग) को स्पर्श नहीं करना चाहता था।

2

मैं एक ही त्रुटि मिली लेकिन मैं @XmlType एनोटेशन (पुस्तकालय से आ रही) तो एक और समाधान के अंदर

@javax.xml.bind.annotation.XmlSchema(namespace = "http://kona.webservice.sif.unidata.com/") 
package com.sopra.banking.processengine.servicecontract.v1_1.dto; 
संबंधित मुद्दे