2016-12-15 13 views
5

उठा रहा है क्या कोई मेरी अजीब समस्या के साथ मेरी मदद कर सकता है?साबुन सेवा स्थानीय रूप से काम करती है लेकिन किसी अन्य सर्वर पर क्लासकास्ट अपवाद

मैं एक सेवा है:

@WebMethod 
@WebResult(name = "sendCustomerCommunicationResponse", targetNamespace = "......something/Underwriting/Correspondance/V1", partName = "Body") 
public SendCustomerCommunicationResponse sendCustomerCommunication(
    @WebParam(name = "sendCustomerCommunicationRequest", targetNamespace = "........something/Underwriting/Correspondance/V1", partName = "Body") 
    SendCustomerCommunicationRequest body) 
    throws ServiceException_Exception, SystemException_Exception 
; 

और स्थानीय स्तर पर मैं के साथ यह फोन कर रहा हूँ:

SendCustomerCommunicationResponse response = correspondanceServicePort.sendCustomerCommunication(sendCustomerCommunicationRequest); 

और यह अच्छी तरह से काम करता है। लेकिन जब मैं एक और सर्वर पर आवेदन की तैनाती कर रहा हूँ, मैं प्राप्त कर रहा हूँ:

"java.lang.ClassCastException: 
    it.usi.xframe.ub1.batch.services.esb.SendCustomerCommunicationRequest incompatible with 
    it.usi.xframe.ub1.batch.services.esb.SendCustomerCommunicationResponse" 

पी.एस. आवेदन WebSphere सर्वर पर चल रहा है

अनुरोध है:

<soapenv:Envelope ...someSchema...> 
    <soapenv:Header> 
     <v1:TechnicalHeader> 
     <v1:correlationId>12742</v1:correlationId> 
     <v1:sender>userName</v1:sender> 
     <v1:countryCode/> 
     <v1:channelId/> 
     <v1:userID>userName</v1:userID> 
     <v1:operationId>CHANGE_STATUS</v1:operationId> 
     </v1:TechnicalHeader> 
     <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
            <wsse:UsernameToken> 
               <wsse:Username>someUser</wsse:Username> 
               <wsse:Password>somePassoword</wsse:Password> 
            </wsse:UsernameToken> 
         </wsse:Security> 
    </soapenv:Header> 
    <soapenv:Body> 
     <v11:sendCustomerCommunicationRequest> 
     <v11:eventCode>{"header":{"publishingDate":1474016634749,"eventId":"DEL-NEG","applicationCode":"UB3","correlationId":"9999","language":"IT","channelId":"MOB"},"body":{"ndg":"5106215","additionalInfo":{}}}</v11:eventCode> 
     </v11:sendCustomerCommunicationRequest> 
    </soapenv:Body> 
</soapenv:Envelope> 
+0

कोई नहीं? ? कुछ भी नहीं है :( – Aditzu

+0

कुछ एक प्रतिक्रिया चर के लिए एक अनुरोध वस्तु आवंटित करने के लिए, या कोशिश कर रहा है इसके विपरीत अपवाद की कॉल स्टैक देखने के लिए जहां दिखाना चाहिए –

+0

निष्पादित त्रुटि java.lang.ClassCastException:।। It.usi.xframe.ub1। batch.services.esb.customerCommunication2.SendCustomerC ommunicationRequest it.usi.xframe.ub1.batch.services.esb.customerCommunication2.SendCustomerCommunicationResponseQ ZQat com.sun.proxy। $ Proxy84.sendCustomerCommunication (अज्ञात स्रोत) QZQat it.usi .xframe.ub1.batch.steps.close.ST002CLO.callEsbForPo सिशन (ST002CLO.java4141) QZQat it.usi.xframe.ub1.batch.steps.close.ST002CLO.managePositionList (ST002CLO.java:367) QZQat .usi.xfram e.ub1.batch.steps.close.ST002CLO.run (ST002CLO.java:1 – Aditzu

उत्तर

1

शायद यह एक WebSphere JAXB मुद्दा, संस्करण उपयोग कर रहे हैं या अपने सर्वर कुछ सामग्री वंचित हो सकते हैं से संबंधित हो सकता है। what the docs say पर एक नज़र डालें:

JAXB Unmarshaller दस्तावेज़ unmarshalling में सहायता करने के क्रम में ठूंठ वर्गों उत्पन्न करता है। ये जेनरेट किए गए वर्ग कैश किए जाते हैं और को एप्लिकेशन में अन्य JAXBContexts द्वारा पुन: उपयोग किया जा सकता है।

जब एक JAXBContext एक वर्ग जो एक तत्व वाइल्डकार्ड (अर्थात @XmlAnyElement) यह संभव था कि Unmarshaller एक और JAXBContext से असंगत उत्पन्न ठूंठ कक्षाओं का प्रयोग करेंगे जो एक ClassCastException में परिणाम सकता है unmarshalling दौरान फेंक दिया जा रहा है शामिल हैं। पहले उत्पन्न जेनरेट स्टब कक्षाओं पर टकराव जांच को हल करके समस्या का समाधान किया गया था ताकि कैश में पाए गए पहले जेनरेट किए गए स्टब क्लास को संगत नहीं किया गया हो, तो क्लास वर्तमान JAXBContext से उत्पन्न होता है।

आईबीएम की प्रकृति के कारण अनुमान लगाया जाना मुश्किल है कि आप जिस संस्करण का उपयोग कर रहे हैं। इसके अलावा, कुछ अन्य सामग्री देखें:

+0

आपके उत्तर के लिए धन्यवाद? क्या आप कृपया मुझे बता सकते हैं कि कैश किए गए लोगों का उपयोग करने के बजाय मैं नए स्टब्स बनाने के लिए चेक कैसे करूँ? – Aditzu

1

ऐसा लगता है समस्या की तरह सर्वर पर (या अनुरोध के साथ) है।

जब सर्वर एक अनुरोध संसाधित करता है, तो यह सिर्फ इसकी प्रतिध्वनि बनाता है। संदेश पेलोड बदला नहीं गया था (किसी भी कारण से) और कोई अपवाद नहीं फेंक दिया गया था।

इसलिए, जब वापस आता है और unmarshalled यह SendCustomerCommunicationResponse का उदाहरण नहीं है, लेकिन SendCustomerCommunicationRequest

मैं या tcpMon क्लाइंट और सर्वर के बीच (अनुरोध के नमूने के साथ) SOAPUI उपयोग करने के लिए क्या सही अनुरोध है देखने के लिए पहले कर सकते हैं सुझाव और सर्वर से प्रतिक्रिया।

1

प्रश्न:

  • कैसे SendCustomerCommunicationResponse परिभाषित किया गया है? क्या इसमें @Xml.. एनोटेशन शामिल हैं? (जैसे @XmlRoot ..
  • सिर्फ परीक्षण के लिए, आप कुछ वापसी वर्ग के नाम से अलग करने के लिए @WebResult वापसी चर के लिए एक नाम सेट कर सकते हैं (SendCustomerCommunicationResponse)
  • क्या ServiceException_Exception और SystemException_Exception? अपने खुद के अपवाद हैं? ऐसा लगता है होते हैं JAX-रु/JAXB उत्पन्न अपवाद ..
1

परिदृश्यों जहां डेवलपर्स वेब सेवा स्टब्स बना सकते हैं और एक नए संस्करण का उपयोग कर अपनी परियोजना में निर्माण में से एक यह एक वर्ग संस्करण बेमेल मुद्दे की तरह दिखता है। जबकि से रैवर क्लासपाथ में कुछ निर्भर जार फ़ाइल का पुराना संस्करण है। मैं बेमेल निर्भरता संस्करणों के इस विकल्प को रद्द करने के लिए निम्न चरणों की अनुशंसा करता हूं।

  1. निर्भरता पेड़ और असफल होने वाली फ़ाइलों के लिए प्राप्त करें। आपको निर्भर जार फ़ाइलों की एक सूची प्राप्त करनी चाहिए।
  2. WebSphere सर्वर classpath तुलना करें (विशेष रूप से जार फ़ाइल है कि अपने स्थानीय मशीन में अनुरोध और प्रतिक्रिया ऑब्जेक्ट के निर्माण के लिए जिम्मेदार है की जाँच करें) और किसी भी लापता जार जोड़ें।
  3. वेबस्पेयर क्लासपाथ में किसी भी निर्भर जार फ़ाइलों को प्रतिस्थापित करें यदि वे पुराने संस्करण से संबंधित हैं।

दूसरा आईडी आपके आईडीई में डी-कंपाइलर को सक्षम करने के बाद, यदि संभव हो तो रिमोट डीबग करने के लिए हो सकता है। वर्ग फ़ाइलों जहां अपवाद तब होता है की जाँच करें और सुनिश्चित करें कि संपादक नाविक दृश्य से जुड़ा हुआ है, सुनिश्चित करें कि आपके नाविक जार जो डिबग किया जा रहा में फ़ाइल को दर्शाता है। आपको अपवाद के समय बुलाए गए सटीक जार फ़ाइल को ढूंढने में सक्षम होना चाहिए।

संबंधित मुद्दे