2015-12-22 2 views
1

Мне нужно создать свой XML следующим образом:не может претендовать только XSD атрибут с помощью XJC

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<advice_request xmlns="urn:xyz.com:bf:api:core:v1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
<instructions> 
    <instruction i:type="advice_instruction_adjust"> 
     <method>not_set</method> 
     <quantity>1</quantity> 
     <site_guid>abcd123</site_guid> 
    </instruction> 
</instructions> 
</advice_request> 

Примечание атрибут «тип» квалифицирован с «я».

Я определил XSD как:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns="urn:xyz.com:bf:api:core:v1" 
    xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
    targetNamespace="urn:xyz.com:bf:api:core:v1" 
    elementFormDefault="qualified" attributeFormDefault="unqualified"> 
<xsd:element name="advice_request"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="instructions" type="Instructions" minOccurs="1" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

<xsd:complexType name="Instructions"> 
    <xsd:sequence> 
     <xsd:element name="instruction" type="Instruction" minOccurs="1" maxOccurs="unbounded"/> 
    </xsd:sequence> 
</xsd:complexType> 

<xsd:complexType name="Instruction"> 
    <xsd:sequence> 
     <xsd:element name="method" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
     <xsd:element name="quantity" type="xsd:int" minOccurs="1" maxOccurs="1"/> 
     <xsd:element name="site_guid" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
    </xsd:sequence> 
    <xsd:attribute name="type" id="type" type="xsd:string"/> 
</xsd:complexType> 
</xsd:schema> 

XJC генерирует следующий package-info.java:

@XmlSchema(namespace = "urn:xyz.com:bf:api:core:v1", elementFormDefault = QUALIFIED) 

Однако на сортировочных объект я всегда получаю XML как:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<advice_request xmlns="urn:xyz.com:bf:api:core:v1"> 
<instructions> 
    <instruction type="advice_instruction_adjust"> 
     <method>not_set</method> 
     <quantity>1</quantity> 
     <site_guid>abcd123</site_guid> 
    </instruction> 
</instructions> 
</advice_request> 

Как получить атрибут с «i»? Любая помощь очень ценится.

Я попробовал несколько вещей, как импортировать пространство имен XMLSchema инстанции, не устанавливая SCHEMA_LOCATION на ИАС явно (хотя это может быть вариант для меня), но до сих пор ничего ...

Спасибо заранее!

ответ

0

Вы должны использовать Иерархию для своего complexType. i:type="advice_instruction_adjust" Означает, что есть complextType под названием advice_instruction_adjust.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns="urn:xyz.com:bf:api:core:v1" 
    xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
    targetNamespace="urn:xyz.com:bf:api:core:v1" 
    elementFormDefault="qualified" attributeFormDefault="qualified"> 

    <xsd:element name="advice_instruction_adjust" type="advice_instruction_adjust"/> 
    <xsd:complexType name="advice_instruction_adjust"> 
     <xsd:complexContent> 
      <xsd:extension base="Instruction"> 
      </xsd:extension> 
     </xsd:complexContent> 
    </xsd:complexType> 

    <xsd:element name="Instructions" type="Instructions"/> 
    <xsd:complexType name="Instructions"> 
     <xsd:sequence> 
      <xsd:element name="instruction" type="Instruction" minOccurs="1" maxOccurs="unbounded"/> 
     </xsd:sequence> 
    </xsd:complexType> 


    <xsd:complexType name="Instruction" abstract="true"> 
     <xsd:sequence> 
      <xsd:element name="method" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
      <xsd:element name="quantity" type="xsd:int" minOccurs="1" maxOccurs="1"/> 
      <xsd:element name="site_guid" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:schema> 

See here more details

Вот пример XML

<?xml version="1.0" encoding="UTF-8"?> 
<ns1:Instructions xmlns:ns1="urn:xyz.com:bf:api:core:v1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <ns1:instruction i:type="advice_instruction_adjust"> 
     <ns1:method /> 
     <ns1:quantity/> 
     <ns1:site_guid/> 
    </ns1:instruction> 
</ns1:Instructions> 
+0

Большое спасибо сэр !! Я не был знаком с этим и предполагал, что «тип» был атрибутом. Оцените оперативный ответ. – Pratik

+0

Ваше приветствие :) – Xstian

 Смежные вопросы

  • Нет связанных вопросов^_^