2012-09-20 8 views
23

। समस्या यह है कि मुझे String के बजाय JAXBElement<String> उत्पन्न हुआ।JAXB मैं उपयोग कर रहा हूँ <code>Apache CXF</code><code>cxf-codegen-plugin</code><code>Maven</code> प्लगइन <code>WSDL</code> फ़ाइल से स्रोतों उत्पन्न करने के लिए पैदा करने JAXBElement <String> बजाय स्ट्रिंग

<jaxb:bindings version="2.1" 
       xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"> 
    <jaxb:globalBindings generateElementProperty="false"/> 
</jaxb:bindings> 

यह JAXB रोकने चाहिए JAXBElement<String> उत्पन्न करने के लिए: मैं jaxb-bindings.xml फ़ाइल जो इस तरह दिखता है जोड़ लिया है। लेकिन यह काम नहीं कर रहा है मेरे पास अभी भी JAXBElement<String>String के बजाय उत्पन्न हुआ है।

मेरे Maven प्लगइन इस तरह दिखता है:

<plugin> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-codegen-plugin</artifactId> 
    <version>${cxf.runtime.version}</version> 
    <dependencies> 
     <dependency> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-rt-bindings-soap</artifactId> 
      <version>${cxf.runtime.version}</version> 
     </dependency> 
    </dependencies> 
    <executions> 
     <execution> 
      <id>generate-jaxb</id> 
      <phase>generate-sources</phase> 
      <configuration> 
       <additionalJvmArgs>-Dfile.encoding=UTF8</additionalJvmArgs> 
       <wsdlOptions> 
        <wsdlOption> 
         <wsdl>src/main/resources/wsdl/Cubiks.wsdl</wsdl> 
         <extraargs> 
          <extraarg>-b</extraarg> 
          <extraarg>${basedir}/jaxb-bindings.xml</extraarg> 
          <extraarg>-b</extraarg> 
          <extraarg>${basedir}/jaxws-bindings.xml</extraarg> 
          <extraarg>-exsh</extraarg> 
          <extraarg>true</extraarg> 
          <extraarg>-wsdlLocation</extraarg> 
          <extraarg></extraarg> 
         </extraargs> 
        </wsdlOption> 
        <wsdlOption> 
         <wsdl>src/main/resources/wsdl/CubiksCallBackService.wsdl</wsdl> 
         <extraargs> 
          <extraarg>-b</extraarg> 
          <extraarg>${basedir}/jaxws-bindings.xml</extraarg> 
          <extraarg>-b</extraarg> 
          <extraarg>${basedir}/jaxb-bindings.xml</extraarg> 
          <extraarg>-exsh</extraarg> 
          <extraarg>true</extraarg> 
          <extraarg>-p</extraarg> 
          <extraarg>com.cubiks.ws.callback</extraarg> 
          <extraarg>-wsdlLocation</extraarg> 
          <extraarg></extraarg> 
         </extraargs> 
        </wsdlOption> 
       </wsdlOptions> 
      </configuration> 
      <goals> 
       <goal>wsdl2java</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

CXF संस्करण 2.6.0 है। क्या कोई जानता है कि समस्या कहां हो सकती है?

संपादित

XSD बहुत बड़ा है। यह तत्व जो JAXBElement<String>

<xs:complexType name="ServiceResponse"> 
    <xs:sequence> 
     <xs:element minOccurs="0" name="RequestStatus" type="tns:RequestStatus"/> 
     <xs:element minOccurs="0" name="RequestStatusDescription" nillable="true" type="xs:string"/> 
    </xs:sequence> 
    </xs:complexType> 
    <xs:element name="ServiceResponse" nillable="true" type="tns:ServiceResponse"/> 

उत्पन्न कर रहा है और उत्पन्न स्रोत है:

@XmlElementRef(name = "RequestStatusDescription", namespace = "http://www.cubiksonline.com/2009/08/AssessmentProvider", type = JAXBElement.class) 
protected JAXBElement<String> requestStatusDescription; 
+1

Plz wsdl फ़ाइल प्रदान करता है और, यदि आपके पास है, तो xsd – popfalushi

उत्तर

34

मुझे के साथ jaxb:globalBindings को लपेटना था।

<jaxb:bindings version="2.0" 
       xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"> 
    <jaxb:bindings> 
     <jaxb:globalBindings generateElementProperty="false"/> 
    </jaxb:bindings> 
</jaxb:bindings> 

अब सब कुछ काम कर रहा है, वहाँ कोई JAXBElement<String> अब उत्पन्न है।

+1

क्या कोई यह समझा सकता है कि यह क्यों काम करता है? –

+0

इस समाधान की रिपोर्ट करने में खुशी है जेड डेवलपर में भी काम करता है। जब आप डब्लूएसडीएल के यूआरएल/स्थान निर्दिष्ट करते हैं तो बस एक एक्सएमएल फ़ाइल बनाएं और चरण में विज़ार्ड में इसे पास करें। – webuster

+0

यह नेटबीन 8.2 में भी काम करता था। सेवा पर राइट क्लिक करें और "वेब सेवा विशेषताओं को संपादित करें"। फिर "WSDL अनुकूलन" टैब पर जाएं और नीचे "बाहरी बाध्यकारी फ़ाइलें" के अंतर्गत इस फ़ाइल को जोड़ें और पुन: उत्पन्न करें। सभी तारों को स्ट्रिंग के रूप में हल किया गया। टैंक! – Darrelk

4

मुझे लगता है कि आप अपने JAXB-binding.xml में जोड़ना चाहते हैं:

<jaxb:bindings ... xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"> 
    <jaxb:globalBindings generateElementProperty="false"> 
     <xjc:simple /> 
     <!-- ... --> 
    </jaxb:globalBindings> 
</jaxb:bindings> 
+0

मैं इसे जोड़ने की कोशिश कर रहा हूं लेकिन मुझे मिल रहा है: com.sun.istack.SAXParseException2: "xjc: simple" अनुकूलन किसी स्कीमा तत्व से संबद्ध नहीं है। –

+0

मैंने को सही ढंग से प्रबंधित किया है लेकिन फिर भी वही है। JAXBElement उत्पन्न होता है। –

+2

ठीक है, मैंने अब परीक्षण करने के लिए डब्ल्यूएस की जांच की है, यह 'जेनरेटमेंटप्रॉपर्टी = "झूठी" विशेषता है जो मेरे मामले में' जेएक्सबीमेंटमेंट 'रैपर से बचाती है। शोर के लिए खेद है। –

8

आप कर सकते हैं एक साथ टिकाऊ और minoccurs नहीं है। Minoccurs निकालें क्योंकि यह किसी भी तरह तारों के लिए समझ में नहीं आता है।

+0

और क्यों है कि मैं उन्हें एक साथ नहीं रख सकता? जिस तरह से wsdl फ़ाइल क्लाइंट द्वारा प्रदान की जाती है, हमने इसे नहीं बनाया है। मैं समझता हूं कि वे समझ में नहीं आते हैं, लेकिन यह मेरे लिए नहीं है कि वे उन्हें हटाने का फैसला करें या नहीं। –

+5

यदि स्कीमा दोनों में है तो आपको उन मामलों के बीच अंतर करने में सक्षम होने के लिए एक JAXBElement की आवश्यकता है जहां XML तत्व गुम है (minOccurs द्वारा अनुमत) और जहां यह मौजूद है लेकिन 'xsi: nil'। यदि स्कीमा ने केवल एक या दूसरे को अनुमति दी है तो आपको JAXBElement की आवश्यकता नहीं होगी क्योंकि 'शून्य' संपत्ति मान पर्याप्त होगा। –

+3

[यह पोस्ट] (http://cxf.547215.n5.nabble.com/JAXBElement-in-generated-java-classes-tp4933735p4934002.html) इसे अच्छी तरह से बताता है। –

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