2012-11-28 16 views
5

मैं JAXB xccdf-1.1.4.xsd जो एक मानक स्कीमा कि XCCDF Schema LocationJAXB संकलन मुद्दा - [ERROR] संपत्ति "कोई भी" पहले से ही परिभाषित किया गया है

से प्राप्त किया जा सकता है मैं वर्तमान में हूँ के लिए बाध्यकारी बनाने के लिए कोशिश कर रहा हूँ मेरे जेएक्सबी कार्यान्वयन के रूप में एक्लिप्ससेंक मोक्सी का उपयोग करके मुझे यह तथ्य पसंद है कि यह जेएसओएन बाइंडिंग भी उत्पन्न कर सकता है।

मैं कहाँ मारा कुख्यात "[ERROR] संपत्ति" मूल्य एक बाहरी बंधन XML का उपयोग "पहले से ही परिभाषित किया गया है" त्रुटि मैं अवसर की जोड़ी तय, और अब मैं पर

[ERROR] Property "Any" is already defined. Use <jaxb:property> to resolve this conflict. 
line 441 of file:/home/dchu/Playground/Java/eclipselink_moxy/xccdf_1.1.4/xccdf-1.1.4.xsd 

[ERROR] The following location is relevant to the above error 
line 444 of file:/home/dchu/Playground/Java/eclipselink_moxy/xccdf_1.1.4/xccdf-1.1.4.xs 

नीचे एक त्रुटि मार रहा हूँ एक्सएमएल स्कीमा में लाइन का एक स्निपेट जहां त्रुटि हुई।

<xsd:sequence> 
    <xsd:choice minOccurs="1" maxOccurs="1"> 
     <xsd:any namespace="http://purl.org/dc/elements/1.1/" 
       minOccurs="1" maxOccurs="unbounded"/> 
     <xsd:any namespace="http://checklists.nist.gov/sccf/0.1" 
       processContents="skip" 
       minOccurs="1" maxOccurs="unbounded"/> 
    </xsd:choice> 
</xsd:sequence> 

क्या कोई जानता है कि यहां क्या गलत हो सकता है? धन्यवाद!

उत्तर

11

आप किसी भी गुण का नाम बदलने के लिए बाहरी बाइंडिंग फ़ाइल का उपयोग कर सकते हैं।

<?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/schema" 
    xmlns="http://www.example.org/schema" 
    elementFormDefault="qualified"> 

    <xsd:complexType name="foo"> 
     <xsd:sequence> 
      <xsd:choice minOccurs="1" maxOccurs="1"> 
       <xsd:any namespace="" 
        minOccurs="1" maxOccurs="unbounded" /> 
       <xsd:any namespace="http://checklists.nist.gov/sccf/0.1" 
        processContents="skip" minOccurs="1" maxOccurs="unbounded" /> 
      </xsd:choice> 
     </xsd:sequence> 
    </xsd:complexType> 

</xsd:schema> 

XJC कॉल:

binding.xml

<jxb:bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb" version="2.1"> 

    <jxb:bindings schemaLocation="schema.xsd"> 
     <jxb:bindings 
      node="//xsd:complexType[@name='foo']/xsd:sequence/xsd:choice/xsd:any[@namespace='http://checklists.nist.gov/sccf/0.1']"> 
      <jxb:property name="any2" /> 
     </jxb:bindings> 
    </jxb:bindings> 

</jxb:bindings> 

XML स्कीमा (schema.xsd)

नीचे अपनी XML स्कीमा का एक सरलीकृत संस्करण है

नीचे यह है कि आप एक एक्सजेसी कॉल कैसे करते हैं जो बाहरी बाध्यकारी फ़ाइल लेता है।

xjc -b binding.xml schema.xsd 

जनरेट किया गया क्लास (फू)

package org.example.schema; 

import java.util.*; 
import javax.xml.bind.annotation.*; 
import org.w3c.dom.Element; 

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "foo", propOrder = { 
    "any", 
    "any2" 
}) 
public class Foo { 

    @XmlAnyElement(lax = true) 
    protected List<Object> any; 
    @XmlAnyElement 
    protected List<Element> any2; 


    public List<Object> getAny() { 
     if (any == null) { 
      any = new ArrayList<Object>(); 
     } 
     return this.any; 
    } 

    public List<Element> getAny2() { 
     if (any2 == null) { 
      any2 = new ArrayList<Element>(); 
     } 
     return this.any2; 
    } 

} 
1

जब जावा JAXB कार्यान्वयन का उपयोग JAXB बंधन उत्पन्न करने के लिए ब्लेज के सुझाव का उपयोग करना एक JAXB बाहरी बंधन एक्सएमएल काम करेगा बनाने के लिए।

हालांकि यह EclipseLink MOXy jaxb-compiler.sh का उपयोग करते समय काम नहीं करता है। ब्लेज़ ने कहा कि यह कंपाइलर स्क्रिप्ट में एक संभावित बग हो सकता है। bug ticket 395328

अब इस समस्या का समाधान जेडीके से जावा एक्सजेसी कमांड का उपयोग करना है और जेनरेट निर्देशिका में jaxb.properties फ़ाइल मैन्युअल रूप से जोड़ना है। Specifying-eclipselink-moxy-as-yours

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