2010-09-29 9 views
15

जावा में, हम JAXB2 के साथ बहुत काम करते हैं। वस्तु < -> एक्सएमएल मैपिंग जावा वर्गों में टिप्पणी के रूप में परिभाषित कर रहे हैं:क्या XML बाध्यकारी के लिए एक जावास्क्रिप्ट एपीआई है - जावा के लिए जेएक्सबी के अनुरूप?

@XmlRootElement(name="usertask", namespace="urn:test") 
public class UserTask 
{ 
    @XmlElement(namespace="urn:test") 
    public String getAssignee() { ... } 

    public void setAssignee(String assignee) { ... } 
} 

JAXB क्रम इन टिप्पणियों को पढ़ने के लिए और unmarshaller बना सकते हैं एक वस्तु उदाहरण या XML में मार्शल एक वस्तु में XML को पार्स करने।

जेएक्सबी एक स्कीमा कंपाइलर (एक्सजेसी) जहाज करता है जो एक्सएमएल स्कीमा से एनोटेटेड कक्षाएं उत्पन्न कर सकता है, जो एक और शानदार विशेषता है।


हाल ही में हम क्लाइंट-साइड जावास्क्रिप्ट के साथ बहुत कुछ कर रहे हैं। हमें वहां एक्सएमएल प्रोसेसिंग की भी आवश्यकता है। उदाहरण के लिए, हमें this one जैसे डब्ल्यूपीएस दस्तावेज़ों को पार्स करने की आवश्यकता है। ये दस्तावेज नमूना एक्सएमएल के लिए different XML schemas (यहां the WPS 1.0.0 schema का पालन करते हैं) का पालन करते हैं। XML के बजाय जावास्क्रिप्ट ऑब्जेक्ट्स के साथ काम करना बहुत अच्छा होगा, इससे वास्तव में बहुत अधिक प्रयास बचाए जाते हैं। कुछ मामलों में हम JSON- आधारित समाधानों का उपयोग कर सकते हैं जैसे DWR, लेकिन कई मामलों में हमें क्लाइंट-साइड पर XML को संसाधित करना होगा।

मेरा प्रश्न है:

वहाँ जावास्क्रिप्ट के लिए JAXB के कुछ अनुरूप है?

कुछ उपकरण जो एक्सएमएल स्कीमा को कुछ एक्सएमएल < -> ऑब्जेक्ट मैपिंग में संकलित करेंगे और एक्सएमएल और जावास्क्रिप्ट ऑब्जेक्ट्स के बीच कनवर्ट करने के लिए रनटाइम प्रदान करेंगे?

मैं आसानी से कुछ ऐसे स्वरूप में उत्पन्न मैपिंग कल्पना कर सकता:

UserTask = new JSXML.XmlRootElement({ 
    name: "usertask", 
    namespace: "urn:test", 
    properties: [ 
    { 
     assignee: new JSXML.XmlElement({ 
     name: "assignee", 
     namespace: "urn:test", 
     type: new JSXML.XSD.String() 
     }) 
    } 
    ] 
}); 

और यह बहुत unmarshaller या marshaller निर्माण करने के लिए पर्याप्त होना चाहिए।

उत्तर

0

जेएक्सबी के लिए JSON समर्थन के बारे में कैसे?अपने वर्तमान जेएक्सबी एनोटेटेड मॉडल कक्षाओं का पुन: उपयोग करें, लेकिन अपने आरईएसटी एंडपॉइंट्स से जेएसओएन आउटपुट करें।

Jersey के वर्तमान संस्करण JSONJAXBContext के साथ इस (jersey-json मॉड्यूल के माध्यम से) का समर्थन करते हैं।

आप Jackson के JAXB और JAX-RS समर्थन भी आजमा सकते हैं।

+1

जेएक्सबी के लिए JSON समर्थन बिल्कुल वही है जो मुझे चाहिए। लेकिन शुद्ध जावास्क्रिप्ट में, क्लाइंट-साइड पर। जर्सी और कं सर्वर पक्ष पर इस्तेमाल किया जा सकता है। अभी हमारे पास एक डीडब्लूआर-आधारित सर्वर साइड समाधान है जो ठीक काम करता है। लेकिन मुझे क्लाइंट-केवल समाधान की आवश्यकता है (सर्वर-साइड प्रॉक्सी अभी भी ठीक है)। – lexicore

2

आप क्या कर सकते हैं एक सामान्य स्टाइलशीट परिभाषा जोड़ना है: एक्सएसएलटी जेएसओएन में उन्हें बदलने के लिए अपने एक्सएमएल में। उदाहरण: http://code.google.com/p/xml2json-xslt/

जावास्क्रिप्ट के साथ एक्सएमएल को संभालना जेएसओएन, विशेष रूप से क्रॉस ब्राउज़र की तुलना में दर्द है।
स्टाइलशीट आपके अनुरोध पर एक छोटा ओवरहेड जोड़ देगा। या तो सर्वर या क्लाइंट साइड पर, आप चुन सकते हैं, लेकिन आपको इसे तुलना करने के लिए कोड जटिलता और गति से तुलना करना होगा और विभिन्न ब्राउज़रों पर जावास्क्रिप्ट के साथ एक्सएमएल को पढ़ना होगा।

+1

एक्सएसएलटी समाधान कई कारणों से उपयुक्त नहीं है। सबसे पहले, हमें क्लाइंट-साइड प्रसंस्करण की आवश्यकता है। एक्सएमएलटी प्रोसेसर को एक्सएमएल से जेएसओएन में कनवर्ट करने के लिए बहुत भारी, अस्वीकार्य रूप से भारी है। मुझे लगता है कि XSLT यहां प्रौद्योगिकी का सबसे अच्छा विकल्प नहीं है: 7 के एक्सएसएलटी के साथ क्या किया जा सकता है 3K जावास्क्रिप्ट के साथ किया जा सकता है - आपको क्लाइंट साइड पर एक्सएसएलटी प्रोसेसर की आवश्यकता नहीं होगी। – lexicore

+1

दूसरा, एक एक्सएसएलटी जिस तरह से आपने लिंक पोस्ट किया है वह स्कीमा-विशिष्ट नहीं है। उदाहरण के लिए, यदि आपके पास foo तत्व है, तो आप वास्तव में नहीं जानते कि यह एक ही आइटम होना चाहिए: 'foo' या सरणी आइटम: ['foo']। 2010 होने के बाद आप नहीं जानते कि यह एक वर्ष या एक नंबर है या नहीं। एक्सएमएल <-> ऑब्जेक्ट मैपिंग उचित संरचना और प्रकार की जानकारी प्रदान करने के लिए यहां स्कीमा-व्युत्पन्न होना चाहिए जो प्रति एक्सएमएल उदाहरण प्रदान नहीं करता है। – lexicore

+0

अपने एक्सएमएल में ' जैसे किसी शीर्षलेख को जोड़ने के बिना सभी ब्राउज़रों द्वारा समझा जाता है, या आप इसे सर्वर पक्ष बना सकते हैं (nginx है उस पर वास्तव में अच्छा)। जेएसओएन में जाने से कुछ ट्रेडऑफ, खासकर स्कीमा, प्रकार इत्यादि के बारे में बताते हैं ... लेकिन मेरे लिए यह नुकसान के लायक है। – Mic

22

आज तक, मुझे जो कुछ चाहिए, उसके समान कुछ भी नहीं मिला है। इसलिए मैंने इसे स्वयं लागू करने के लिए तैयार किया है। यहाँ परियोजना पृष्ठ है:

http://confluence.highsource.org/display/MISC/Jsonix

परियोजना GitHub पर होस्ट किया गया है:

https://github.com/highsource/jsonix/

+0

अब इसे जारी किया गया है। – lexicore

3

मैं इस प्रयास नहीं किया है, तो मुझे यकीन है कि अगर यह काम करेगा नहीं कर रहा हूँ, लेकिन है आपने जीडब्ल्यूटी का उपयोग करने पर विचार किया ताकि आप अभी भी जेएक्सबी का उपयोग कर सकें और पूरे ऐप को जावा ऐप के रूप में लिख सकें? मुझे यकीन नहीं है कि क्या जीडब्ल्यूटी जेएक्सबी (शायद नहीं) का समर्थन करता है, लेकिन एक्सएमएल पार्सिंग के लिए एक विकल्प हो सकता है जो इसका समर्थन करेगा। यदि यह काम करता है, तो आप gwt के माध्यम से अपने जावास्क्रिप्ट मॉडल के निर्माण को स्वचालित कर सकते हैं, और फिर इन्हें अपने ऐप में शामिल कर सकते हैं। हां, यह आपकी इच्छा से बहुत अधिक क्रूर है, लेकिन इसे खरोंच से लिखने के लिए धड़कता है।

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