2011-01-25 13 views
9

के साथ धारावाहिक उत्पन्न वर्ग। पहले डब्लूएसडीएल। मैं Serializable को लागू करने के लिए मेरा उत्पन्न वर्ग चाहता हूं। मैं अब निम्नलिखित बाध्यकारी एक्सएमएल, जो काम करता है (एसईआई वर्ग के नाम बदल जाती है)जेएक्सबी जेएक्सबी-आरआई और सीएक्सएफ होने के साथ जेएक्स-डब्ल्यूएस बाध्यकारी

<jaxws:bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema" ...> 
    <bindings node="wsdl:definitions/wsdl:portType[@name='Foo']"> 
     <!-- change the generated SEI class --> 
     <class name="IFooService" /> 
    </bindings> 
</jaxws:bindings> 

नहीं, इस संदर्भ में, मैं कहाँ और क्या जोड़ना चाहिए में है। मैंने कोशिश की:

<xsd:annotation> 
    <xsd:appinfo> 
     <jaxb:globalBindings> 
      <xjc:serializable uid="12343" /> 
     </jaxb:globalBindings> 
    </xsd:appinfo> 
</xsd:annotation> 

और

<jxb:globalBindings> 
    <jxb:serializable/> 
</jxb:globalBindings> 

के भीतर और <bindings> टैग बाहर - या तो Serializable नहीं जोड़ा जाता है, या वर्गों (किसी भी त्रुटि के बिना) सब पर उत्पन्न नहीं कर रहे हैं।

भी देखें this thread

तो, वास्तव में

+0

JAXB बाध्यकारी अनुकूलन:

public class SerializablePlugin extends Plugin { @Override public boolean run(Outline outline, Options options, ErrorHandler errorHandler) throws SAXException { for (ClassOutline classOutline : outline.getClasses()) { JDefinedClass definedClass = classOutline.implClass; definedClass._implements(codeModel.ref(Serializable.class)); } return true; } ... } 

उसके बाद, आप SchemaCompiler विकल्प के लिए प्लगइन जोड़ सकते हैं गर्दन में असली दर्द है। वे जेएक्सबी 1.x के बुरे पुराने दिनों से एक हैंगओवर हैं, और इसे 2.x के लिए कभी भी फिर से इंजीनियर नहीं किया गया था। – skaffman

+0

संभावित डुप्लिकेट [जावा क्लास कैसे उत्पन्न करें जो जेएक्सबी का उपयोग कर xsd से सीरियलज़ेबल इंटरफ़ेस लागू करता है?] (Http://stackoverflow.com/questions/1513972/how-to-generate-a-java-class-which-implements- serializable-interface-from-xsd-usi) –

उत्तर

6

कि मैं इसे दो तरह से काम किया जाता करना है:

  1. एक दूसरे बाध्यकारी फ़ाइल है, जो JAXB-केवल है का उपयोग के रूप में एक पास्कल his answer

  2. एक और <bindings> टैग निर्दिष्ट करता है जो पूरे नाम को संभालता है अंतरिक्ष:

    <bindings 
        node="wsdl:definitions/wsdl:types/xsd:schema[@targetNamespace='http://www.yoursite.com/services/mynamespace']"> 
        <jxb:globalBindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
         xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
         <jxb:serializable /> 
        </jxb:globalBindings> 
    </bindings> 
    
+0

क्या आप इन पर विस्तार कर सकते हैं? # 1 के लिए आप दूसरी फ़ाइल को 'wsimport' पर कैसे पास करते हैं? # 2 के लिए जहां '' में यह जाता है और आपके उदाहरण में डिफ़ॉल्ट नामस्थान 'jaxws' है? – OrangeDog

1

वैसा करने के लिए एक XJC प्लगइन को लागू कर सकते हैं:

WsimportOptions wsimportOptions = new WsimportOptions(); 
wsimportOptions.getSchemaCompiler().getOptions().activePlugins.add(new SerializablePlugin()); 
संबंधित मुद्दे