2016-06-30 26 views
0

I Java Modellklassen bin zu erzeugen und ich will javax.xml.bind.annotation.XmlNsForm.QUALIFIED nicht ElementFormDefault- = in meinem package-info.java erscheinen . Ich habe versucht, zwei verschiedene XMLs-ElementFormDefault- = „unqualifizierten“ ignoriert mit XJC

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns="http://www.google.com/Protocol" elementFormDefault="unqualified" 
targetNamespace="http://www.google.com/Protocol" xmlns:xs="http://www.w3.org/2001/XMLSchema" > 
    <xs:element name="A"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element minOccurs="0" maxOccurs="1" name="User" type="xs:string"/> 
     <xs:element name="Attr" type="xs:string"/> 
     <xs:element ref="A1"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
<xs:element name="A1"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Attr" type="xs:string"/> 
     <xs:element minOccurs="0" maxOccurs="1" name="Attr2" type="xs:string"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:element name="Root"> 
    <xs:complexType> 
     <xs:choice> 
     <xs:element ref="A" /> 
     </xs:choice> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

Above Xml generiert Paket-info als unten-

@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.google.com/Protocol") 
package com.google; 

Während auf anderen unter XML-

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns="http://www.google.com/Protocol" elementFormDefault="unqualified" 
targetNamespace="http://www.google.com/Protocol" xmlns:xs="http://www.w3.org/2001/XMLSchema" > 
    <xs:element name="A"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element minOccurs="0" maxOccurs="1" name="User" type="xs:string"/> 
     <xs:element ref="A1"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
<xs:element name="A1"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Attr" type="xs:string"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:element name="Root"> 
    <xs:complexType> 
     <xs:choice> 
     <xs:element ref="A" /> 
     </xs:choice> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

unter package-info.java erzeugt

@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.google.com/Protocol", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) 
package com.google; 

Ich will nicht elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED erscheint in meiner Java-Datei. Derzeit muss ich es manuell in elementFormDefault = javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED bearbeiten, sobald das Modell generiert wurde.

Kann jemand bitte helfen, warum elementFormDefault = "unqualifiziert" wird in zweiten XML ignoriert.

Antwort

0

Nichts ist hier unbedingt falsch (Entschuldigung, wenn Sie dies bereits erkennen).

Der JAXB-Anbieter schätzt nur, was Sie mit diesem Paket tun werden, aber dies wirkt sich nicht auf generierte Klassen aus, sondern nur auf neue, die Sie dem Paket hinzufügen könnten.

Alle generierten Klassen Marschall werden gut werden lokale Elemente nicht mit NS geschrieben werden, wie Sie mit ElementFormDefault- = unqualifizierten erwarten würden, da sie mit einem kompletten Satz von JAXB Annotationen erzeugt worden sind.

Vielleicht weißt du das schon, und ich beantworte deine Frage nicht, aber ich stelle dir vor, dass du denkst, dass dies ein Bug ist, mit dem du umgehen musst und nur darauf hinweist, dass es nicht geht -down und nur mit den generierten Klassen.

Aber für eine echte Antwort, warum gibt es einen Unterschied hier, müssten Sie wahrscheinlich in die Implementierungsdetails und JAXB Provider Doc zu tauchen, um besser zu verstehen. Ich sehe auch keine Standardbindung Anpassung here, so dass auch wahrscheinlich Provider-spezifisch sein würde.

+0

Ich überprüfte JAXB und leider erfüllte es nicht den Zweck. Vielen Dank für Ihre Hilfe :) –

+0

Ich fand eine weitere [link] (http://metro.1045641.n5.nabble.com/JAXB-not-especting-elementFormDefault-for-types-mit-only-referred-element-tp1063047p1063048 .html) im Web. Es ist ein XML-Problem und nicht XJC. Ich suche aber immer noch nach einer Lösung. –

+0

Ich bin mir nicht sicher, ob der Kommentar das Problem erfasst. Keine Ahnung, ob JAXB gut zu dir passt oder nicht. Aber mein Punkt war, dass ich nicht denke, dass es irgendwelche Probleme mit den schemadefinierten Elementen und Typen gibt, und mit den generierten Klassen ist nichts falsch. Wenn Sie ein einfaches Beispielprogramm versuchen, das einige Objektinstanzen der generierten JAXB-Klassen serialisiert, sehen Sie, dass das NS-Qualifikationsmerkmal gemäß dem Schema gültig ist. Aber JAXB berücksichtigt auch die Tatsache, dass Sie aus irgendeinem Grund andere Klassen zu diesem Paket hinzufügen können. –