2009-10-09 10 views
5

मेरे पास कई जेएक्सबी बीन्स हैं जो सीधे जर्सी का उपयोग करके मार्शल और अनारक्षित हैं।जेएक्सबी संग्रह (सूची <T>) एलिमेंट नामों के लिए ऊंट केस के बजाय पास्कल केस का उपयोग करें

उदा।

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "Artifact", propOrder = { 
    "artifactId", 
    "artifactType", 
    "contentHash" 
}) 
@XmlSeeAlso({ 
    EmailArtifact.class, 
    ManagedDocArtifact.class 
}) 
@XmlRootElement(name ="Artifact") 
public class Artifact { 

    protected String artifactId; 
    protected String artifactType; 
    protected String contentHash; 

... 
... 
... 

} 

यदि मैं एक जीईटी विधि बनाता हूं जो एक आर्टिफैक्ट ऑब्जेक्ट देता है।

<Artifact> 
<artifactId>293289392839283</artifactId> 
<artifactType>EMAIL</artifactType> 
<contentHash>2837873827322</contentHash> 
</Artifact> 

यहाँ मैं सफलतापूर्वक विरूपण साक्ष्य तत्व के नाम को नियंत्रित करने के शुरुआत में एक राजधानी 'ए' के ​​लिए सक्षम किया गया है: यह सही ढंग से एक्सएमएल पैदा करता है।

हालांकि, मैं एक GET विधि कि विरूपण साक्ष्य वस्तुओं के संग्रह रिटर्न बनाने के लिए, मैं के साथ अंत:

<artifacts> 
<Artifact> 
<artifactId>293289392839283</artifactId> 
<artifactType>EMAIL</artifactType> 
<contentHash>2837873827322</contentHash> 
</Artifact> 
<Artifact> 
<artifactId>293289392839283</artifactId> 
<artifactType>EMAIL</artifactType> 
<contentHash>2837873827322</contentHash> 
</Artifact> 
</artifacts> 

आप बाहरी तत्व के लिए संग्रह एक छोटे अक्षर 'ए' है देख सकते हैं। अपने आंतरिक मानक के अनुरूप होने के लिए मैं इसे "ए" - कलाकृतियों की राजधानी बनाना चाहता हूं।

मैं नहीं देख सकता कि जेएक्सबी के भीतर परिभाषित करना संभव है, क्या यह वास्तव में जर्सी ढांचा है जो इसे नियंत्रित कर रहा है?

क्या हम संग्रह के लिए उत्पन्न तत्व नाम को नियंत्रित कर सकते हैं?

बहुत धन्यवाद,

जेम्स

+1

1. AFAIK JAXB एक संग्रह (जैसे 'ArrayList ') जैसे मार्शल करने के लिए आप की अनुमति नहीं है। लेकिन यह आपको उस वस्तु को क्रमबद्ध करने की अनुमति देता है जिसमें संपत्ति के रूप में संग्रह होता है। 2।मैं जर्सी से परिचित नहीं हूं, लेकिन मुझे लगता है कि आपको यह जानने की जरूरत है कि क्या यह जेएक्सबी है जो प्रत्येक आर्टिफैक्ट को अलग से क्रमबद्ध करता है और कुछ अन्य परत (जर्सी) भाग के पूरे दस्तावेज़ को बनाता है या यह जेएक्सबी है जो संग्रह के लिए एक्सएमएल खरीदता है। 3. क्या आप कुछ कोड पोस्ट कर सकते हैं (या इसे कहीं प्रकाशित कर सकते हैं) - इसे कैसे कॉल करें? मैं सरल जेएक्सबी के साथ कोशिश कर रहा था लेकिन यह आपके सेट अप की नकल नहीं करता है। –

+1

मुझे संदेह है कि आप सही हैं - यह जर्सी है जो मुझे जेएक्सबी बीन्स के संग्रह को मार्शल/अनमशेल करने की इजाजत दे रही है (मैंने इसे जर्सी उपयोगकर्ता समूह के साथ भी उठाया है)। इसलिए मुझे उम्मीद है कि कुछ विन्यास है जो मुझे संग्रह के लिए XML तत्व नाम के पीछे नाम या नियम सेट करने की अनुमति देता है ... हम प्रतीक्षा करेंगे और देखेंगे। जैसा कि आप इंगित करते हैं, एक नया जेएक्सबी बीन बनाने का कामकाज है - आइए "आर्टिफैक्ट्स" कहें जिसमें एक संग्रह संग्रह सदस्य है। सूची कलाकृतियों - मुझे लगता है कि हालांकि कक्षाओं का एक पूरा समूह पेश करता है जो अधिक मूल्य नहीं जोड़ता है। मदद के लिए धन्यवाद। जेम्स – jallch

उत्तर

9

@XmlElementWrapper जो name विशेषता का समर्थन करता है उपयोग करके देखें:

@XmlElementWrapper(name="ELEMENTS") 
@XmlElement(name="ELEMENT") 
protected final List<String> elements = new LinkedList<String>(); 

उत्पादन होगा

<ELEMENTS> 
    <ELEMENT>one</ELEMENT> 
    <ELEMENT>two</ELEMENT> 
    ... 
</ELEMENTS> 

इस सुविधा के लिए JAXB Tutorial देखें।

+1

हाय वहाँ, दुर्भाग्य से मैं XmlElementWrapper से अवगत हूं लेकिन यह मेरे उपयोग के मामले पर लागू नहीं होता है। जर्सी के भीतर आप जेएक्सबी बीन्स के संग्रह का उत्पादन और उपभोग कर सकते हैं। जैसे सार्वजनिक सूची getMyBeans आप MyBean क्लास को एनोटेट करने के लिए XmlElementWrapper का उपयोग नहीं कर सकते - आप केवल कक्षा की संपत्ति के विरुद्ध इस एनोटेशन का उपयोग कर सकते हैं। कक्षा के भीतर एक संग्रह। तो यह अच्छा नहीं होगा। इसमें एक समाधान है कि मैं एक नई कक्षा का उपयोग कर सकता हूं जिसमें संग्रह होता है - लेकिन ईमानदार होने के लिए जो उस डिज़ाइन के भीतर एक कक्षा बना रहा है जिसकी वास्तव में आवश्यकता नहीं है। – jallch

+0

एक्सएमएल के बारे में अच्छी बात यह है कि इसे 1000 तरीकों से बदला जा सकता है;) आप ** एक्सएसएलटी ** या ** डॉम ** का उपयोग कर सकते हैं। –

+0

बहुत बहुत धन्यवाद, आपके समाधान ने सूचियों के क्रमिकरण के साथ एक और मुद्दा हल किया है। – Pragmateek

5

ठीक है - मुझे जावा जर्सी समुदाय के नेता - पॉल सैंडोज से अपडेट मिला है। यह वर्तमान में जर्सी ढांचे के साथ एक खुली समस्या है और केवल कुछ ऐसा है जिसे हमें भविष्य में अद्यतन में तय किए जाने तक काम करना या स्वीकार करना होगा।

ऊपर दी गई टिप्पणियों में से एक में समझाया गया कार्यवाही प्रत्येक वेब सेवा विधि के लिए एक नई कक्षा शुरू करना है जो जेएक्सबी एनोटेटेड बीन्स का संग्रह (उदा। सूची) देता है। यह वर्ग प्रभावी रूप से एक वर्ग है जिसमें केवल एक सदस्य होता है - जेएक्सबी बीन्स की एक सूची। वेब सेवा विधि में सूची लौटने के बजाय हम इसके बजाय विशेष कक्षा वापस कर देते हैं। चूंकि हमारे पास XML में नई कक्षा के नाम पर नियंत्रण है, उदा। @XmlRootElement (नाम = "कलाकृतियों") हम अल्प अवधि में समस्या का समाधान कर सकते हैं।

उम्मीद है कि इससे मदद मिलती है।

सादर,

जेम्स

+0

क्या आप जानते हैं कि वर्तमान जर्सी रिलीज (1.11) में कोई समाधान है या नहीं? या सुविधा पर जर्सी चर्चा/मुद्दे के लिए कोई सूचक? – Yaegor

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