2011-02-01 14 views
10

Paket düzeyinde, @ xmlSchema ek açıklamayla yapılandırılmış tüm parametreleri bir xml dosyasında gösteremiyorum.@xmlSchema ek açıklamalı kullanımı jaxb

@javax.xml.bind.annotation.XmlSchema (    
    xmlns = { 
      @javax.xml.bind.annotation.XmlNs(prefix = "com", 
        namespaceURI="http://es.indra.transporte.common"), 

      @javax.xml.bind.annotation.XmlNs(prefix = "xsi", 
        namespaceURI="http://www.w3.org/2001/XMLSchema-instance"), 

      @javax.xml.bind.annotation.XmlNs(prefix = "ns2", 
        namespaceURI="http://es.indra.transporte.configuration"),    
      },  
    location = "http://es.indra.transporte.configuration StationNetwork.xsd", 
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED   
) 
package es.indra.transporte.central.thalesinterface.common.beans; 

ben gibi bir şey görmeyi beklediğiniz: Örneğin: Ben ayarlamak, eğer

<stationNetwork xmlns:ns2="http://es.indra.transporte.configuration" 
       xmlns:com="http://es.indra.transporte.common" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:schemaLocation="http://es.indra.transporte.configuration StationNetwork.xsd"> 

ama şu çıktıyı alıyorum: Ben yanlış yapıyorum ne

<stationNetwork xmlns:com="http://es.indra.transporte.common"> 

? Beklenen çıktıyı nasıl alabilirim? aşağıdaki gibi

cevap

3

Bir şema konumu yazabiliriz:

Marshaller marshaller = jc.createMarshaller(); 
marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "http://es.indra.transporte.configuration StationNetwork.xsd"); 
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
marshaller.marshal(root, System.out); 

Aşağıdaki kodu çalıştırma:

import javax.xml.bind.JAXBContext; 
import javax.xml.bind.Marshaller; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     JAXBContext jc = JAXBContext.newInstance(StationNetwork.class); 

     StationNetwork root = new StationNetwork(); 

     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "http://es.indra.transporte.configuration StationNetwork.xsd"); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.marshal(root, System.out); 
    } 

} 

Çıktı - Metro (JAXB RI)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<stationNetwork 
    xmlns:com="http://es.indra.transporte.common" 
    xmlns:ns2="http://es.indra.transporte.configuration"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://es.indra.transporte.configuration StationNetwork.xsd"/> 

Çıktı -Yardımlarınız için gecikme için özür

<?xml version="1.0" encoding="UTF-8"?> 
<stationNetwork 
    xsi:schemaLocation="http://es.indra.transporte.configuration StationNetwork.xsd" 
    xmlns:ns2="http://es.indra.transporte.configuration" 
    xmlns:com="http://es.indra.transporte.common" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> 
+0

Kök düğümdeki xmlns'i ek açıklamalarla nasıl ayarlayabilirim? @Get yönteminden Response.ok (varlık) .build() ile dönüyorum ve marşalörü doğrudan kullanmıyorum. – neu242

+0

Unutmayın, package-info.java'daki @XmlSchema harika çalıştı. – neu242

1

.... teşekkürler, şimdi schemaLocation gösterebilir, ama ben istiyorum gibi ben hala xml yok. Belki baştan düzgün senaryoyu açıklamadı, beni tekrar deneyelim:CommonDataTypeCairo.xsd ve ortak yapıların kullanımı bir önceki ithal StationNetwork.xsd:

Ben 2 şemalar var.

şöyle başlar CommonDataTypeCairo.xsd:

<schema xmlns="http://www.w3.org/2001/XMLSchema" 
     xmlns:com="http://es.indra.transporte.common" 
     targetNamespace="http://es.indra.transporte.common" 
     elementFormDefault="qualified" 
     attributeFormDefault="unqualified"> 
    <complexType name="head">   
     <sequence>    
      <element name="formatVersion" type="integer"/> 
     <element name="confVersion" type="integer"/>    
      <element name="generationDate" type="dateTime"/>        
      <element name="activationDate" type="dateTime"/>   
     </sequence> 
    </complexType> 

Ve StationNetwork.xsd:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns:com="http://es.indra.transporte.common" 
      xmlns="http://es.indra.transporte.configuration" 
      targetNamespace="http://es.indra.transporte.configuration" 
      lementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:import namespace="http://es.indra.transporte.common" 
       schemaLocation="CommonDataTypeCairo.xsd"/> 

aşıp java c var Farklı paketlerde lasses yani farklı package-info.java dosyaları var.

@javax.xml.bind.annotation.XmlSchema(
    namespace = "http://es.indra.transporte.configuration"     
) 
package es.indra.transporte.central.thalesinterface.topology.beans; 

ve Ortak şema için: StationNetwork şeması için ben

@javax.xml.bind.annotation.XmlSchema(
    namespace = "http://es.indra.transporte.common", 
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED, 
    attributeFormDefault = javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED 
) 
package es.indra.transporte.central.thalesinterface.common.beans; 

StationNetwork.geçerli değil

<ns3:stationNetwork xmlns:ns2="http://es.indra.transporte.common" 
        xmlns:ns3="http://es.indra.transporte.configuration" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://es.indra.transporte.configuration StationNetwork.xsd"> 
<head> 
    <ns2:formatVersion>1</ns2:formatVersion> 
    <ns2:confVersion>1</ns2:confVersion> 
    <ns2:generationDate>2010-12-22T00:00:00Z</ns2:generationDate> 
    <ns2:activationDate>2010-12-21T09:07:25Z</ns2:activationDate> 
</head> 

, ve istediğim çıkışı: Bu yapılandırma ile elde xml olan ns3 öneki olmadan

<stationNetwork xmlns:ns2="http://es.indra.transporte.common" 
       xmlns="http://es.indra.transporte.configuration" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:schemaLocation="http://es.indra.transporte.configuration StationNetwork.xsd"> 
<head> 
    <ns2:formatVersion>1</ns2:formatVersion> 
    <ns2:confVersion>1</ns2:confVersion> 
    <ns2:generationDate>2010-12-22T00:00:00Z</ns2:generationDate> 
    <ns2:activationDate>2010-12-21T09:07:25Z</ns2:activationDate> 
</head> 

, ancak bunu nasıl bilmiyorum. Bu konuda yardımcı olabilirseniz harika olabilir.