2012-02-03 8 views
6

JAXB जैसे तरीकों पैदा कर रहा है "है": isIsBuyNow() और isHasBuyNow() जब मैं isBuyNow() या hasBuyNow() चाहते हैं।दूर करने के लिए कैसे JAXB से बूलियन ही टिककर खेल उत्पन्न

कई वर्ग विधियां उत्पन्न की जा रही हैं, इसलिए जेनरेट किए गए विधि नामों को व्यक्तिगत रूप से अनुकूलित करना संभव नहीं है।

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

उत्तर

2

इसकी आवाज़ से आपको केवल क्लास नामों के लिए विधि नाम बदलने की आवश्यकता है। आप या तो करने में सक्षम हो सकता है:

  1. है कि इस अनुमति देता है एक XJC प्लग इन खोजें या
  2. इस

मुझे शक है पहला विकल्प मौजूद है (हालांकि तुम भाग्यशाली हो सकती है है कि एक XJC प्लगइन लिखना), लेकिन दूसरा विकल्प बहुत सरल लगता है। अपनी खुद की लिखने के तरीके पर कुछ पोस्ट के लिए this page देखें।

+0

आप एक मानक (जेएसआर -222) बाहरी बाध्यकारी फ़ाइल का उपयोग कर संपत्ति नाम को कस्टमाइज़ कर सकते हैं, और बाहरी प्लग-इन की आवश्यकता नहीं है: http://stackoverflow.com/a/9127208/383861 –

1

प्लगइन मार्ग पर मार्च करने से पहले। मैं आपके चर नाम को कोरक्रेटिंग पर जोर देता हूं। यह जावा बीन सम्मेलनों के अनुसार होना चाहिए। और जेएक्सबी केवल उस के अनुसार काम करना चाहिए।

इसलिए यदि चर बूलियन है, तो आइडिया को अब खरीदना चाहिए। प्रासंगिक गेटर विधि केवल BuyNow() बन जाएगी जो आप चाहते हैं। यह फिर से मैपिंग पुनर्जन्म का मामला होगा। कोई regeex कोई कस्टम खोज/प्रतिस्थापन नहीं है (दाएं) चाहते हैं :)

+0

स्कीमा I मैं तीसरी पार्टी का उपयोग कर रहा हूं और मेरे पास इसे बदलने का विकल्प नहीं है, दुर्भाग्य से। – Kevin

+0

ओह मुझे यह अनुमान लगाया जाना चाहिए था कि :( –

+1

आप यहां एक अलग संपत्ति देने में सक्षम हो सकते हैं जैसा कि कस्टमाइजिंग प्रॉपर्टी बिनबिंग्स में उल्लेख किया गया है - http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/ 2.0/ट्यूटोरियल/डॉक्टर/JAXBUsing4.html # wp148590 –

3

आप अपनी संपत्ति के नाम को अनुकूलित करने के लिए बाहरी बाइंडिंग फ़ाइल का उपयोग कर सकते हैं। JAXB को संपत्ति के रूप में विधि को पहचानने के लिए इसे get या is के साथ बूलियन प्रकारों के लिए शुरू करने के सम्मेलन का पालन करना होगा।

schema.xsd

<?xml version="1.0" encoding="utf-8" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:complexType name="root"> 
     <xs:attribute name="is-buy-now" type="xs:boolean"/> 
    </xs:complexType> 

</xs:schema> 

बाइंडिंग।एक्सएमएल

बाइंडिंग में दाखिल नीचे हम XML विशेषता के लिए एक संपत्ति नाम निर्दिष्ट किया है is-buy-now कहा जाता है:

<jxb:bindings 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
    version="2.1"> 
    <jxb:bindings schemaLocation="is.xsd"> 
     <jxb:bindings node="//xs:complexType[@name='root']/xs:attribute[@name='is-buy-now']"> 
     <jxb:property name="buyNow"/> 
     </jxb:bindings> 
    </jxb:bindings> 
</jxb:bindings> 

XJC कॉल

-b विकल्प के लिए एक बाइंडिंग फ़ाइल निर्दिष्ट करने के लिए प्रयोग किया जाता है:

xjc -d out -b bindings.xml schema.xsd 

रूट

नतीजतन निम्नलिखित वर्ग के साथ उत्पन्न हो जाएगा: isBuyNow और setBuyNow तरीके:

// 
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
// Any modifications to this file will be lost upon recompilation of the source schema. 
// Generated on: 2012.02.03 at 05:18:59 AM EST 
// 


package generated; 

import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlAttribute; 
import javax.xml.bind.annotation.XmlType; 


/** 
* <p>Java class for root complex type. 
* 
* <p>The following schema fragment specifies the expected content contained within this class. 
* 
* <pre> 
* &lt;complexType name="root"> 
* &lt;complexContent> 
*  &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> 
*  &lt;attribute name="is-buy-now" type="{http://www.w3.org/2001/XMLSchema}boolean" /> 
*  &lt;/restriction> 
* &lt;/complexContent> 
* &lt;/complexType> 
* </pre> 
* 
* 
*/ 
@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "root") 
public class Root { 

    @XmlAttribute(name = "is-buy-now") 
    protected Boolean buyNow; 

    /** 
    * Gets the value of the buyNow property. 
    * 
    * @return 
    *  possible object is 
    *  {@link Boolean } 
    *  
    */ 
    public Boolean isBuyNow() { 
     return buyNow; 
    } 

    /** 
    * Sets the value of the buyNow property. 
    * 
    * @param value 
    *  allowed object is 
    *  {@link Boolean } 
    *  
    */ 
    public void setBuyNow(Boolean value) { 
     this.buyNow = value; 
    } 

} 

अद्यतन

आप जावा वर्गों से शुरू करते हैं तो आप @XmlAccessorType(XmlAccessType.FIELD) निर्दिष्ट कर सकते हैं फ़ील्ड को मैप करने के लिए और अपनी विधियों का नाम चुनने के लिए:

@XmlAccessorType(XmlAccessType.FIELD) 
public class Root { 

    @XmlAttribute(name="has-buy-now") 
    private boolean buyNow; 

    public boolean hasBuyNow() { 
     return buyNow; 
    } 

} 
+1

+ 1 पूरी तरह से उदाहरण के लिए भी। मेरी आलसी हड्डियों :) –

+0

यदि कह रहे हैं, 100 विधियां, खरीद-अभी-अभी, समाप्त हो चुकी है, आरक्षित है, ऐसा लगता है कि यह समाधान मुझे सैकड़ों लाइनों को लिखता है bindings.xml फ़ाइल क्या यह मामला है, या मैंने गलत समझा है? – Kevin

+0

इस दृष्टिकोण के साथ आप सही हैं। यदि आपके पास इनमें से कई गुण हैं तो आप @ KalebBrasee द्वारा दिए गए दृष्टिकोण का लाभ उठा सकते हैं: http://stackoverflow.com/a/9123497/383861 –

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