2011-11-04 12 views
12

मैं एक ईजेबी को अनुबंध के रूप में पहली एसओएपी सेवा लिख ​​रहा हूं और मैं डब्ल्यूएसडीएल से जावा कक्षाएं और एसईआई उत्पन्न करता हूं। डब्ल्यूएसडीएल बाधाओं (अधिकतम लंबाई, पैटर्न, आदि) के साथ कई प्रकार निर्दिष्ट करता है। जेनरेट जावा क्लास जेएक्सबी एनोटेटेड हैं लेकिन इन्हें प्रदूषित मेटाडेटा की कमी है क्योंकि जेएक्सबी एनोटेशन उन लोगों का समर्थन नहीं करते हैं। इसका मतलब है कि इनपुट सत्यापन केवल तभी होता है जब सेवा को एसओएपी एंडपॉइंट के माध्यम से बुलाया जाता है।मैं एक्सएसडी से बीन सत्यापन एनोटेशन के साथ जावा ऑब्जेक्ट्स कैसे उत्पन्न कर सकता हूं?

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

प्रश्न: मैं केवल जेएक्सबी एनोटेशन कैसे उत्पन्न नहीं कर सकता बल्कि जावा कक्षाओं पर बीन सत्यापन एनोटेशन भी उत्पन्न कर सकता हूं?

उत्तर

2
: इस दृष्टिकोण का एक लाभ यह है कि आप अपने उपयोग के मामलों की दोनों के लिए एक ही सत्यापन नियमों (XML स्कीमा में परिभाषित) का उपयोग है

आप इस प्लगइन का उपयोग कर xsd से बीन सत्यापन एनोटेशन जेनरेट कर सकते हैं https://github.com/krasa/krasa-jaxb-tools

4

जेएसआर 303 एनोटेशन जोड़ने के लिए अब तक का सबसे अच्छा जवाब Annotate Plugin का उपयोग करना है।

+0

यह निश्चित रूप से एक अंतराल सूचक है। धन्यवाद। –

6

आप javax.xml.valdation एपीआई का उपयोग किसी XML स्कीमा के विरुद्ध जेएक्सबी के साथ मैप किए गए डोमेन मॉडल को मान्य करने के लिए कर सकते हैं।

import java.io.File; 
import javax.xml.XMLConstants; 
import javax.xml.bind.JAXBContext; 
import javax.xml.bind.util.JAXBSource; 
import javax.xml.validation.*; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     Customer customer = new Customer(); 
     customer.setName("Jane Doe"); 
     customer.getPhoneNumbers().add(new PhoneNumber()); 
     customer.getPhoneNumbers().add(new PhoneNumber()); 
     customer.getPhoneNumbers().add(new PhoneNumber()); 

     JAXBContext jc = JAXBContext.newInstance(Customer.class); 
     JAXBSource source = new JAXBSource(jc, customer); 

     SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
     Schema schema = sf.newSchema(new File("customer.xsd")); 

     Validator validator = schema.newValidator(); 
     validator.setErrorHandler(new MyErrorHandler()); 
     validator.validate(source); 
    } 

} 

पूर्ण उदाहरण

+0

और यदि मैं उपयोगकर्ता को अच्छा सत्यापन संदेश प्रदर्शित करना चाहता हूं? बीन प्रमाणीकरण मददगार 'कॉन्स्ट्रेनटिओलेशन' ऑब्जेक्ट्स वापस कर देगा, लेकिन एक्सएमएल वैलिडेटर त्रुटि के अनुमानित तकनीकी विवरण के साथ केवल स्ट्रिंग लौटने के साथ सामग्री प्रतीत होता है? – meriton

2

आप MOXy संस्करण 2.6+ का उपयोग JAXB प्रदाता के रूप में कर सकते हैं और यह स्वचालित रूप से किया जाएगा। मोक्सी एक्लीप्ससेंक परियोजना में एक ढांचा मॉड्यूल है।

फिलहाल, वहाँ संस्करण 2.6.0-एम 3 है EclipseLink पर उपलब्ध की: sonatype या maven

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