Detailliertes Beispiel für den JAXB-Namespace und das Präfix in Java
Dieser Artikel führt Sie hauptsächlich in die relevanten Informationen zum JAXB-Namespace und den Präfixen ein. Der Artikel stellt ihn im Detail anhand des Beispielcodes vor gemeinsam lernen.
In diesem Artikel wird erläutert, wie Sie Jaxb in Kombination mit dem XMLFilterImpl-Filter von dom4j verwenden, um eine vollständige Kontrolle über Serialisierung und Deserialisierung zu erreichen
Implementieren Sie hauptsächlich die folgenden Funktionen
Ignorieren Sie den Namespace beim Serialisieren und Deserialisieren
Verwenden Sie beim Serialisieren die Annotation
@XmlRootElement(namespace="http://www.lzrabbit.cn")
als Standard-Namespace der Klasse und eliminieren Sie den Namespace vollständig Präfix Bei der Serialisierung hat die referenzierte Klasse einen anderen Namespace. Das Namespace-Präfix wird nicht generiert, aber die entsprechende XMLNS-Deklaration wird dem spezifischen XML-Knoten
- Andere XML-Knotenbenennungs- und Namespace-Anforderungen
- Mehrere Namespaces unter demselben Paket
- Benutzerdefinierter Namespace Präfix
Abhängiges Glas dom4j
<dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency>Das Hauptprinzip besteht darin, das zu steuern Namespace und XML-Knotenname über die anonyme Implementierungsklasse von XMLFilterImpl während der Serialisierung und Deserialisierung, um unterschiedliche Anforderungen zu erfüllen. Wenn Sie weitere personalisierte Anforderungen haben, erweitern Sie bitte Ihre eigenen
package com.bjpowernode.util; import java.io.StringReader; import java.io.StringWriter; import javax.xml.bind.*; import javax.xml.transform.sax.SAXSource; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLFilterImpl; import org.xml.sax.helpers.XMLReaderFactory; public class XmlUtil { public static String toXML(Object obj) { try { JAXBContext context = JAXBContext.newInstance(obj.getClass()); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");// //编码格式 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);// 是否格式化生成的xml串 marshaller.setProperty(Marshaller.JAXB_FRAGMENT, false);// 是否省略xm头声明信息 StringWriter out = new StringWriter(); OutputFormat format = new OutputFormat(); format.setIndent(true); format.setNewlines(true); format.setNewLineAfterDeclaration(false); XMLWriter writer = new XMLWriter(out, format); XMLFilterImpl nsfFilter = new XMLFilterImpl() { private boolean ignoreNamespace = false; private String rootNamespace = null; private boolean isRootElement = true; @Override public void startDocument() throws SAXException { super.startDocument(); } @Override public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException { if (this.ignoreNamespace) uri = ""; if (this.isRootElement) this.isRootElement = false; else if (!uri.equals("") && !localName.contains("xmlns")) localName = localName + " xmlns=\"" + uri + "\""; super.startElement(uri, localName, localName, atts); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if (this.ignoreNamespace) uri = ""; super.endElement(uri, localName, localName); } @Override public void startPrefixMapping(String prefix, String url) throws SAXException { if (this.rootNamespace != null) url = this.rootNamespace; if (!this.ignoreNamespace) super.startPrefixMapping("", url); } }; nsfFilter.setContentHandler(writer); marshaller.marshal(obj, nsfFilter); return out.toString(); } catch (Exception e) { throw new RuntimeException(e); } } public static <T> T fromXML(String xml, Class<T> valueType) { try { JAXBContext context = JAXBContext.newInstance(valueType); Unmarshaller unmarshaller = context.createUnmarshaller(); // return (T) unmarshaller.unmarshal(new StringReader(xml)); SerializeUtil obj = new SerializeUtil(); XMLReader reader = XMLReaderFactory.createXMLReader(); XMLFilterImpl nsfFilter = new XMLFilterImpl() { private boolean ignoreNamespace = false; @Override public void startDocument() throws SAXException { super.startDocument(); } @Override public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException { if (this.ignoreNamespace) uri = ""; super.startElement(uri, localName, qName, atts); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if (this.ignoreNamespace) uri = ""; super.endElement(uri, localName, localName); } @Override public void startPrefixMapping(String prefix, String url) throws SAXException { if (!this.ignoreNamespace) super.startPrefixMapping("", url); } }; nsfFilter.setParent(reader); InputSource input = new InputSource(new StringReader(xml)); SAXSource source = new SAXSource(nsfFilter, input); return (T) unmarshaller.unmarshal(source); } catch (Exception e) { throw new RuntimeException(e.getMessage()); } } }Beispiel-Entitätsklasse
import javax.xml.bind.annotation.*; @XmlRootElement(namespace="http://www.lzrabbit.cn/") @XmlAccessorType(XmlAccessType.FIELD) public class ClassA { private int classAId; @XmlElement(name="ClassAName") private String classAName; @XmlElement(namespace="http://www.cnblogs.com/") private ClassB classB; public int getClassAId() { return classAId; } public void setClassAId(int classAId) { this.classAId = classAId; } public String getClassAName() { return classAName; } public void setClassAName(String classAName) { this.classAName = classAName; } public ClassB getClassB() { return classB; } public void setClassB(ClassB classB) { this.classB = classB; } } import javax.xml.bind.annotation.*; @XmlAccessorType(XmlAccessType.FIELD) public class ClassB { private int ClassBId; private String ClassBName; public int getClassBId() { return ClassBId; } public void setClassBId(int classBId) { this.ClassBId = classBId; } public String getClassBName() { return ClassBName; } public void setClassBName(String classBName) { this.ClassBName = classBName; } }Aufruf
import com.bjpowernode.util.XmlUtil; public class MainRun { /** * @param args */ public static void main(String[] args) { ClassB classB = new ClassB(); classB.setClassBId(22); classB.setClassBName("B2"); ClassA classA = new ClassA(); classA.setClassAId(11); classA.setClassAName("A1"); classA.setClassB(classB); System.out.println(XmlUtil.toXML(classA)); } }Ausgabeergebnis:
<?xml version="1.0" encoding="UTF-8"?> <classA xmlns="http://www.lzrabbit.cn/"> <classAId>11</classAId> <ClassAName>A1</ClassAName> <classB xmlns="http://www.cnblogs.com/"> <ClassBId>22</ClassBId> <ClassBName>B2</ClassBName> </classB> </classA>Sie können sehen, dass die Ausgabe-XML vollständig unsere Erwartungen erfüllt
Zusammenfassung
Das obige ist der detaillierte Inhalt vonDetailliertes Beispiel für den JAXB-Namespace und das Präfix in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Stock Market GPT
KI-gestützte Anlageforschung für intelligentere Entscheidungen

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Der direkteste Weg ist, den Speicherort zu erinnern, normalerweise in Ordnern wie Desktop, Dokumente, Downloads usw.; Wenn es nicht gefunden werden kann, können Sie die Systemsuchfunktion verwenden. Die Datei "fehlenden" ist hauptsächlich auf Probleme wie die Unaufmerksamkeit des Speicherpfads, die Namensspeicherabweichung, das Versteck oder die Cloud -Synchronisation zurückzuführen. Effiziente Verwaltungsvorschläge: Klassifizieren Sie nach Projekt, Zeit und Typ, nutzen Sie den schnellen Zugang, regelmäßig und archivieren Sie sie und standardisieren Sie die Benennung. Windows -Suche und Suche über den Datei -Explorer und die Taskleiste, während MacOS auf Finder und Spotlight angewiesen ist, was schlauer und effizienter ist. Mastering -Tools und die Entwicklung guter Gewohnheiten ist der Schlüssel.

Verwenden Sie den Parameter -cp, um das JAR zum Klassenpfad hinzuzufügen, damit das JVM seine internen Klassen und Ressourcen laden kann, wie z.

Verwenden Sie das Keyword implementiert die Benutzeroberfläche. Die Klasse muss spezifische Implementierungen aller Methoden in der Schnittstelle bereitstellen. Es unterstützt mehrere Schnittstellen und wird von Commas getrennt, um sicherzustellen, dass die Methoden öffentlich sind. Die Standard- und statischen Methoden nach Java 8 müssen nicht umschreiben.

Javagenericsprovidecompile-timetypesafetyandeliminatecastingbyallowingtypeparametersonclasses,interfaces,andmethods;wildcards(?,?extendsType,?superType)handleunknowntypeswithflexibility.1.UseunboundedwildcardwhentypeisirrelevantandonlyreadingasObject

Überprüfen Sie zunächst, ob die Netzwerkverbindung normal ist. Wenn andere Websites nicht geöffnet werden können, liegt das Problem im Netzwerk. 1. Löschen Sie den Browser -Cache und die Cookies, geben Sie Chrome -Einstellungen ein und wählen Sie durch das Durchsuchen der Browserdaten. 2. Schließen Sie die Erweiterung, und Sie können den narbenlosen Modus verwenden, um zu testen, ob er durch Plug-in-Konflikte verursacht wird. 3. Überprüfen und schließen Sie die Proxy- oder VPN -Einstellungen, um zu vermeiden, dass die Netzwerkverbindung abgefangen wird. V. 5. Chrom aktualisieren oder neu auf die neueste Version installieren, um Kompatibilitätsprobleme zu lösen; 6. Verwenden Sie andere Browser, um zu vergleichen und zu testen, um zu bestätigen, ob das Problem nur Chrom ist. Entsprechend Fehlereingaben wie Err_Connection_Timed_out oder Err_SSL_Protocol_er

Verwenden Sie Wait () und benachrichtigen (), um das Problem der Herstellerverbraucher zu implementieren: Die synchronisierte Methode wird verwendet, um den Zugriff auf den gemeinsam genutzten Puffer zu steuern. Der Produzent wartet, wenn der Puffer voll ist, der Verbraucher wartet, wenn der Puffer leer ist, und verwendet Benoyify (), um den entsprechenden Thread aufzuwecken. 2. Verwenden Sie Blockingqueue im Java.util.Concurrent-Paket, um den Thread-Safe-Datenaustausch leichter zu implementieren, wobei die manuelle Verwaltung von Schlössern und das bedingte Warten vermieden wird.

Verwenden Sie die Methode datetime.strptime (), um eine Zeichenfolge in ein DateTime -Objekt umzuwandeln, und es ist erforderlich, um sicherzustellen, dass die Formatter und die Zeichenfolge genau übereinstimmen. 2. Zu den gemeinsamen Formatierern zählen %y (Vier-Bit-Jahr), %M (Monat), %D (Tag), %H (Stunde), %m (Minute), %s (Sekunden) usw.; 3. Verwenden Sie %i und %p für die Zeit mit AM/PM und verwenden Sie DateTime.FromisoFormat () direkt für ISO -Formate; 4. Wenn das Format nicht übereinstimmt, wird ein ValueError angehoben. Es wird empfohlen, DateUtil.Parser.Parse () zu verwenden, um es beim Umgang mit mehreren Formaten automatisch zu identifizieren. Die korrekte Verwendung dieser Methoden kann die Zeichenfolgen für DateTime -Objekte effizient vervollständigen
