2013-04-25 4 views
10

मैं इस परीक्षण वर्ग हैजावा जेआरई 1.6 एसई में जेएक्सबी कार्यान्वयन के संस्करण को प्रतिस्थापित करना संभव है?

import javax.xml.bind.annotation.XmlElement; 

class CompileTest { 

    void foo(@XmlElement String in) { 
    } 

} 

मेरी जावा संस्करण

$ java -version 
java version "1.6.0_23" 
Java(TM) SE Runtime Environment (build 1.6.0_23-b05) 
Java HotSpot(TM) Client VM (build 19.0-b09, mixed mode, sharing) 

है और मैं

javac CompileTest.java 
CompileTest.java:5: annotation type not applicable to this kind of declaration 
    void foo(@XmlElement String in) { 
      ^
1 error 

हो रही है जब मैं उस वर्ग को संकलित करने के लिए प्रयास करें और है कि जावा 6 के लिए मान्य है जब मैंने कक्षा पथ में नई जेएक्सबी लाइब्रेरी जोड़ने की कोशिश की, तो इससे मदद नहीं मिली। क्या इसे हल करने का कोई तरीका है?

javac -cp jaxb-api-2.2.4.jar CompileTest.java 
+0

त्रुटि संकलक से है, एक अलग से प्रभाव में (नए:

या, डी java.endorsed.dirs विकल्प

javac -Djava.endorsed.dirs=/your/path/to/jaxb-directory CompileTest.java

संदर्भ का उपयोग) भाषा का संस्करण। तो जार की जगह का कोई प्रभाव नहीं पड़ेगा। बस उत्सुक, आप जावा 6 का उपयोग क्यों नहीं करते? – talonx

+0

मुझे समझ में नहीं आता है। "... भाषा के एक अलग (नए) संस्करण से ...", क्या? "बस उत्सुक, आप जावा 6 का उपयोग क्यों नहीं करते?" मैं हूं, शायद यह जावा 7 होना चाहिए, ऐसा इसलिए है क्योंकि हम 6 से 7 तक माइग्रेट नहीं कर सकते हैं, जबकि उत्पादन में जावा 6 वास्तव में है ... – Betlista

+0

@Betlista - इसी तरह का प्रश्न और समाधान http://stackoverflow.com/ पर है प्रश्न/8211420/xmlelement-annotation-dissallowed-with-webparam –

उत्तर

11

उपयोग जावा समर्थन मानकों अवहेलना तंत्र

अपने jaxb-api-2.2.4.jar अंदर <java-home>\lib\endorsed निर्देशिका रखो। ,
http://docs.oracle.com/javase/6/docs/technotes/guides/standards/

+0

मुझे java.endorsed.dirs पैरामीटर पसंद है, क्योंकि मुझे सभी एपी के लिए जावा इंस्टॉलेशन को संशोधित करने की आवश्यकता नहीं है plications ... – Betlista

2

यह केवल, क्षेत्र या विधि पर लागू किया जा सकता विधि पैरामीटर पर नहीं। देखें

@Retention(RUNTIME) @Target({FIELD, METHOD}) 
public @interface XmlElement { 

संपादित करें: XmlElement के स्रोत (JDK 1.6.0_18)

* @since JAXB2.0 
* @version $Revision: 1.19 $ 
*/ 

@Retention(RUNTIME) @Target({FIELD, METHOD}) 
public @interface XmlElement { 

तो मैं क्या देख 1.6.0_18 संस्करण 1.19 केवल FIELD और METHOD लक्ष्य उपलब्ध होने संशोधन के XmlElement गया है।

संपादित करें: तो आपकी समस्या jdk 1.6 xmlElement jaxb.2.2 के समान नहीं है। आप http://grepcode.com/file/repo1.maven.org/maven2/javax.xml.bind/jaxb-api/2.2.4/javax/xml/bind/annotation/XmlElement.java?av=f

+0

जैसा कि मैंने लिखा "... यह जावा 6 के लिए मान्य है ...", "... मैंने कक्षा पथ में नई जेएक्सबी लाइब्रेरी जोड़ने की कोशिश की ...", जहां लक्ष्य' @ लक्ष्य ({FIELD, METHOD, PARAMETER}) है। – Betlista

+0

@harsh - जावा 6 में, इसे @ लक्ष्य (मान = {FIELD, METHOD, पैरामीटर} घोषित किया गया है)। http: // docs देखें। oracle.com/javaee/6/api/javax/xml/bind/annotation/XmlElement.html –

+0

यही कारण है कि मैं जावा 6 के साथ 'jaxb-api-2.2.4.jar' से कक्षा का उपयोग कैसे करना है, यह पूछ रहा हूं यहां तक ​​कि संभव है। – Betlista

4

पर स्रोत की जांच कर सकते हैं "अनुमोदित पुस्तकालय" फ़ोल्डर की अवधारणा का उपयोग करें। यहां एक नज़र डालें: How can I make Ant use JAXB x instead of Java 6 SE JAXB classes ...

मूल रूप से यह जेएआरबी के एक नवीनतम संस्करण का उपयोग करने के लिए जेआरई को निर्देश देने का एक तरीका है।

आप यहाँ और अधिक पढ़ सकते हैं: Unofficial guide to JAXB: Using JAXB 2 with SE 6 इसके अलावा इस प्रश्न देखें: What is the exact way to use endorsed directory in JRE 6

+0

मुझे लगता है कि रवि का जवाब मेरे से बेहतर लिखा गया है - कृपया वोट दें @ रवि - मैंने किया! – GrahamMc

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