2009-08-10 19 views
14

मेरे पास एक ऐसा एप्लिकेशन है जो लगभग एक वर्ष के लिए जावा 1.5 के तहत खुशी से चल रहा है। हमने अभी बॉक्स को अपडेट किया है और जावा 1.6 स्थापित किया है।जावा विधि 1.5 में काम करती है लेकिन 1.6

नए सर्वर पर ऐप को तैनात करने के बाद हमने पाया है कि एप्लिकेशन कुछ एक्सएमएल को बदलने की कोशिश करते समय अपवाद फेंक रहा है। हम समझ नहीं पाए थे कि यह तब तक क्यों हो रहा था जब तक कि हम इसे स्थानीय रूप से तैनात नहीं करते थे और वही हुआ। एसडीके को v1.5 में बदलने के बाद समस्या बंद हो गई और एप्लिकेशन ठीक चला गया।

यहाँ विधि के स्रोत है:

import java.io.StringWriter; 
import javax.xml.transform.Result; 
import javax.xml.transform.Source; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerConfigurationException; 
import javax.xml.transform.TransformerException; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 

import org.w3c.dom.Element; 
import org.w3c.dom.Node; 


    public static String xmlToString(Node node) { 
    try { 
     Source source = new DOMSource(node); 
     StringWriter stringWriter = new StringWriter(); 
     Result result = new StreamResult(stringWriter); 
     TransformerFactory factory = TransformerFactory.newInstance(); 
     Transformer transformer = factory.newTransformer(); 
     transformer.transform(source, result); 
     return stringWriter.getBuffer().toString(); 
    } catch (TransformerConfigurationException e) { 
     e.printStackTrace(); 
    } catch (TransformerException e) { 
     e.printStackTrace(); 
    } 
    return null; 
    } 

यह दुर्घटनाग्रस्त है "transformer.transform (स्रोत, परिणाम);" अपवाद के साथ लाइन:

Exception in thread "main" java.lang.AbstractMethodError: org.apache.xerces.dom.DocumentImpl.getXmlStandalone()Z 
    at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.setDocumentInfo(DOM2TO.java:373) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:127) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:94) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:662) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:708) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313) 

किसी को भी दो संस्करणों जो इस का कारण होता है के बीच जावा में किए गए बदलाव का पता है? सबसे आसान फिक्स क्या होगा?

आपकी मदद के लिए धन्यवाद।

+4

ऐसा लगता है कि आपके क्लास पथ में कहीं भी एक विरोधाभासी ज़ेरेक्स कार्यान्वयन है। – akarnokd

+1

आपके क्लासपाथ में क्या एक्सएमएल संबंधित जार हैं? – Yishai

उत्तर

18

मुझे याद नहीं है कि यह 1.4 और 1.5 या 1.5 और 1.6 के बीच था, लेकिन सूर्य से जेवीएम के साथ भेजे गए Xalan पुस्तकालयों ने अपना पैकेज नाम बदल दिया। मैं लगभग 2 साल पहले इसी तरह से भाग गया। मुझे लगता है कि मुझे क्या करना था समस्या को ठीक करने के लिए स्पष्ट रूप से अपने स्वयं के xalan कार्यान्वयन जहाज था।

अद्यतन: यह हो सकता है कि मैं क्या, के बारे में सोच रहा था, हालांकि यह अभी भी आपकी समस्या link text

+7

आपको केवल जेएक्सपी एपीआई का उपयोग करना चाहिए या स्वयं जेरस पुस्तकालयों पर निर्भर होना चाहिए, कभी भी सूर्य-आपूर्ति कार्यान्वयन पर नहीं (जो रिलीज़ के बीच अलग-अलग होगा)। – wds

+1

मुझे एक ऐसा मामला दिखाई देता है जहां यह हो रहा है और कोड ट्रांसफॉर्मर बनाने के लिए ट्रांसफॉर्मर फैक्टरी को कॉल कर रहा है, फिर ट्रांसफॉर्मर पर ट्रांसफॉर्म() को ट्रांसफर कर रहा है और यह इस अपवाद को फेंक रहा है। ऐसा करने का यह सही तरीका प्रतीत होता है। कोड जावा 5 में ठीक काम कर रहा था और जावा 6 में अपग्रेड करने के बाद यह अपवाद फेंक रहा है। Xalan की अपनी प्रतिलिपि सहित इस मुद्दे को हल किया गया। –

+0

मुझे xalan की अपनी प्रति कहां मिलती है? और मैं ऑरैकल द्वारा दी गई चीज़ों को कैसे शामिल और प्रतिस्थापित कर सकता हूं ??? –

3

यह जार (Xalan) संस्करण संघर्ष की वजह से समस्या है से संबंधित हो सकता। जार निकालें और एक कोशिश

+0

मैंने एक नया ज़ीरस जार जोड़ने की कोशिश की लेकिन यह ऊपर उल्लिखित उत्तर के अनुसार हल नहीं हुआ, इसलिए मैंने आपके सुझाव की कोशिश की और मेरे निर्माण पथ से जेरिस जेएआर को हटा दिया और यह काम किया, धन्यवाद! – Kairan

+0

XALAN rt.jar में आता है क्या आप कह रहे हैं कि मुझे जार/lib पथ से जार को हटा देना चाहिए? –

0

आप Xerces से नवीनतम संस्करण का उपयोग कर सकते देना (मेरा मानना ​​है कि यह JDK1.6 साथ compitable होना चाहिए)

7

यह समस्या एक पुराने xerces साथ JDK 1.6 पर होने के लिये जाना जाता है। जार, जब क्लासपाथ पर, अपना खुद का दस्तावेज़बिल्डर फ़ैक्टरी प्रदान करता है।

प्लेटफ़ॉर्म डिफ़ॉल्ट फ़ैक्टरी का उपयोग करते समय समस्या उत्पन्न नहीं होती है।

आप अपने वेब-आईएनएफ/lib या समकक्ष की जांच कर सकते हैं।

2

मुझे यह कोड java.lang.AbstractMethodError मेरे कोड में मिलता है।

किसी भी पुस्तकालय के संस्करण को बदलने के समय एक विकल्प नहीं था, लेकिन मुझे रहस्यमय तरीके से काम करने वाले दूसरे कोड की तुलना करके एक समाधान मिला। शायद यह दूसरों को वहां मदद कर सकता है।

इसे सभी को दस्तावेज़ I DOMSource() में पास किया गया था। मूलतः मैं एक दस्तावेज़ बनाया था मानक तरीके से:

 DocumentBuilderFactory factory = new DocumentBuilderFactoryImpl(); 

अब मैं अब अपवाद: इस मुद्दे आसपास काम

private static Document documentFromInputStream(InputStream in) throws ParserConfigurationException, SAXException, IOException { 
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder = factory.newDocumentBuilder(); 
    Document doc = builder.parse(new InputSource(in)); 
    return doc; 
} 

के लिए, मैं इस प्रकार कारखाने लाइन बदलने ।

+0

बढ़िया! जार संघर्ष से निपटने के लिए नहीं है। धन्यवाद। –

0

मुझे एक ही समस्या थी & ने xercesImpl-2.0.2 को प्रतिस्थापित किया।मेरे आवेदन के वर्ग पथ में xercesImpl-2.11.0.jar के साथ जार फ़ाइल। यह ठीक काम कर रहा है।

0

यह मेरे लिए काम किया।

TransformerFactory factory = TransformerFactory.newInstance(); 
    Transformer transformer = factory.newTransformer(); 
      transformer.setOutputProperty(OutputKeys.METHOD, "xml"); 
    DOMSource source = new DOMSource(doc); 
      StreamResult result = new StreamResult(sWout); 
      transformer.transform(source, result); 
संबंधित मुद्दे