2012-01-30 4 views
13

के लिए "कक्षाओं के लिए बाउंड" के बजाय एक पैकेज निर्दिष्ट करें, मैं वसंत का उपयोग कर जावा कक्षाओं के एक सेट को मार्शल करने के लिए जैक्सब 2 मारशेलर का उपयोग करने की कोशिश कर रहा हूं। मैं जानता हूँ कि यह निम्नलिखित कोडवसंत Jaxb2Marshaller

<bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
    <property name="classesToBeBound"> 
     <list> 
      <value>com.example.test1</value> 
      <value>com.example.test2</value> 
     </list> 
    </property> 
</bean> 

मैं ऐसा करने के बजाय कक्षाओं की एक सूची निर्दिष्ट करने के है चाहते हैं क्या उपयोग किया जा सकता है, मैं (ऊपर मामले में सिर्फ पैकेज सभी वर्गों युक्त नाम निर्दिष्ट करना चाहते हैं com.example)।

क्या किसी को ऐसा करने का कोई तरीका पता है, या किसी अन्य तरीके से मुझे सभी कक्षाओं को सूचीबद्ध करने की आवश्यकता नहीं है। किसी भी सहायता की सराहना की जाएगी !

धन्यवाद।

उत्तर

11

स्प्रिंग 3.1 से (मुझे लगता है कि) तुम भी उपयोग कर सकते हैं packagesToScan संपत्ति है, जो वाइल्ड कार्ड स्वीकार करता है। यह @XmlRootElement एनोटेशन के बिना तत्वों के साथ काम नहीं करता है, जैसे संदर्भपैथ संपत्ति। इन जरूरतों को उत्पन्न वस्तु-कारखाने।

<property name="packagesToScan"> 
    <list> 
     <value>com.test.*</value> 
     <value>com.*.test</value> 
    </list> 
</property> 
+0

यदि आप @XmlRootAnnotation खो रहे हैं और XSD स्रोत को संशोधित नहीं कर सकते हैं तो वैश्विक जैक्सबी अनुकूलन का उपयोग करने पर विचार करें http://stackoverflow.com/a/8725352/881375 – tomasb

3

यदि आप अपने आवेदन संदर्भ में JAXB के नए संस्करण का उपयोग कर रहे हैं तो you can use something like this यदि आप अपने एक्सएमएल फ़ाइल में ऑक्सम नेमस्पेस जोड़ते हैं।

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:oxm="http://www.springframework.org/schema/oxm" 
     xsi:schemaLocation=" 
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
      http://www.springframework.org/schema/oxm 
      http://www.springframework.org/schema/oxm/spring-oxm-3.1.xsd"> 
    <oxm:jaxb2-marshaller id="jaxbMarshaller" contextPath="com.example"/> 
    <!-- other beans --> 
</beans> 

मैं एक उत्पादन स्तर के कार्यक्रम इन के साथ चल रहा है, इसलिए मुझे पता है कि आप किसी भी अधिक प्रश्न हैं तो करते हैं।

गुड लक।

+0

धन्यवाद

की तरह लग सकता है! क्या मुझे com.yourcompany.yourapp.foo में jaxb.index फ़ाइल को शामिल करने की आवश्यकता नहीं है? –

+0

आप किस इंडेक्स फ़ाइल के बारे में बात करते हैं? मेरे पास मेरी परियोजना में कोई भी फाइल नहीं है। इसमें किस प्रकार की जानकारी है? – thatidiotguy

+0

मैंने एक छोटा परीक्षण चलाया और मुझे निम्न अपवाद मिला: नेस्टेड अपवाद javax.xml.bind.JAXBException है: "com.yourcompany.yourapp.foo" में ObjectFactory.class या jaxb.index शामिल नहीं है। जो मुझे http://stackoverflow.com/questions/899668/how-do-i-use-a-jaxb-index-file –

5

आप निम्न सिंटैक्स साथ contextPath सेट कर सकते हैं:

<bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
    <property name="contextPath" value="com.example"/> 
</bean>