2011-08-31 10 views
11

मैं निम्नलिखित सरल XSD दस्तावेज़ (foo.xsd) मिल गया है:जेएक्सबी एक्सजेसी - XPath मूल्यांकन के परिणाम खाली लक्ष्य नोड में परिणाम?

<?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      targetNamespace="urn:foo"> 
    <xsd:element name="Person"> 
    <xsd:complexType> 
     <xsd:sequence> 
     <xsd:element name="Name" type="xsd:string"/> 
     <xsd:element name="Height"> 
      <xsd:simpleType> 
      <xsd:restriction base="xsd:string"> 
       <xsd:enumeration value="Short"/> 
       <xsd:enumeration value="Average"/> 
       <xsd:enumeration value="Tall"/> 
      </xsd:restriction> 
      </xsd:simpleType> 
     </xsd:element> 
     </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

और मैं XJC JAXB संकलक है कि "ऊंचाई" तत्व एक का उपयोग करके एक प्रकार सुरक्षित enum वर्ग का उपयोग करना चाहिए करने के लिए संकेत करना चाहते हैं बाहरी बाइंडिंग फ़ाइल है, तो (foo.xjb) की तरह:

parsing a schema... 
[ERROR] XPath evaluation of "//xsd:element[@name='Height']/xsd:simpleType" results in empty target node 
    line 6 of file:/Users/maerics/src/java/jaxb/foo.xjb 

Failed to parse a schema. 
:

<?xml version="1.0" encoding="UTF-8"?> 
<jxb:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
       xmlns:xsd="http://www.w3c.org/2001/XMLSchema" 
       jxb:version="2.0"> 
    <jxb:bindings schemaLocation="foo.xsd"> 
    <jxb:bindings node="//xsd:element[@name='Height']/xsd:simpleType"> 
     <jxb:typesafeEnumClass name="Height" /> 
    </jxb:bindings> 
    </jxb:bindings> 
</jxb:bindings> 

लेकिन जब मैं कमांड "xjc -b foo.xjb foo.xsd" मैं निम्नलिखित त्रुटि मिलती है चलाने

XPath अभिव्यक्ति मुझे ठीक लगती है, इसलिए मुझे लगता है कि एक्सएमएल नेमस्पेस से संबंधित कुछ सूक्ष्म समस्या है? मैंने डिफ़ॉल्ट नामस्थान, लक्ष्य नामस्थान आदि का उपयोग करने (या नहीं) के कुछ संयोजनों की कोशिश की है लेकिन हमेशा एक ही त्रुटि है। ध्यान दें कि xjc एक्सएसडी फ़ाइल के लिए जावा स्रोत उत्पन्न करता है, बिना बाहरी बाइंडिंग फ़ाइल के, अपेक्षित। इसी प्रकार, एक्सएसडी फ़ाइल में एम्बेडेड बाइंडिंग परिभाषाओं का उपयोग अपेक्षित के रूप में काम करता है।

ध्यान दें कि मैक ओएस 10.6.8 पर जावा संस्करण "1.6.0_26" और xjc संस्करण "JAXB 2.1.10 में जेएडीबी 6.10" का उपयोग कर रहा हूं।

क्या कोई यह बता सकता है कि मूल एक्सएसडी को संशोधित किए बिना इस लक्ष्य को कैसे प्राप्त किया जाए?

उत्तर

26

हे, आप अपने आप को किक करने के लिए जब आप समस्या को देखने जा रहे हैं:

foo.xsd में, आप इस राशि:

xmlns:xsd="http://www.w3.org/2001/XMLSchema" 

foo.xjb में, आप इस राशि:

xmlns:xsd="http://www.w3c.org/2001/XMLSchema" 

नोट "w3" बनाम "W3C"। उन दो विशेषताओं को बिल्कुल मेल खाना चाहिए, और फिर आपका XPath काम करेगा (अन्यथा आपके xjb में संदर्भित नामस्थान आपके एक्सएसडी में संदर्भित एक्सएसडी नेमस्पेस से अलग है।)

+0

हा! आंखों की अतिरिक्त जोड़ी के लिए धन्यवाद; हाथ से हाथ लिखने के लिए मुझे यही मिलता है, मुझे लगता है =) – maerics

+0

जैसे ही सिस्टम मुझे देता है बाउंटी ... – maerics

+0

एक ही समस्या थी, हालांकि मेरी समस्या यह थी कि xsd को नामस्थान के रूप में भी घोषित नहीं किया गया था। DOH। –

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