簡體   English   中英

如何在JAXB中將XML與名稱空間編組?

[英]How to marshall XML with namespace in JAXB?

我想使用已定義的XSD架構來封送XML:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="myNamespace" xmlns="myNamespace">
    <xs:element name="element" type="JavaBean" />
    <xs:complexType name="JavaBean">
    </xs:complexType>
</xs:schema>

這是空的Java bean類型:

package main;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "JavaBean")
public class JavaBean {
}

簡單的測試結果顯示為“ 找不到元素'element'的聲明。 ”錯誤。

package main;

import java.io.File;
import java.io.IOException;

import javax.xml.XMLConstants;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.namespace.QName;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;

import org.xml.sax.SAXException;

public class Test {
    public static void main(String[] args) throws JAXBException, IOException, SAXException {
        final SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        Schema schema = factory.newSchema(new File("sample.xsd"));

        JavaBean message = new JavaBean();
        JAXBElement<JavaBean> element = new JAXBElement<>(new QName("element"), JavaBean.class, message);

        JAXBContext context = JAXBContext.newInstance(JavaBean.class);
        Marshaller jaxbMarshaller = context.createMarshaller();
        jaxbMarshaller.setSchema(schema);
        jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        jaxbMarshaller.marshal(element, System.out);
    }
}

有趣的是,當我從XML模式定義中刪除targetNamespace和xmlns時,它會很好地工作。

我究竟做錯了什么?

根據您的架構,默認情況下,元素綁定到myNamespace命名空間。

因此,您需要使用適當的名稱空間創建JavaBean

JAXBElement<JavaBean> element = new JAXBElement<>(new QName("myNamespace", "element"), JavaBean.class, message);

如何編組 ArrayList<object> [] 在 JAXB 中?<div id="text_translate"><p> 我有一個 ArrayList[] 類型的變量(列表),我想將它保存在 XML 中。 我嘗試了 JAXB,但它只保存了“”字符串(“的重復”等於 list.length)並且在 ArrayLists 中沒有任何項目。如果我嘗試二維數組,它工作正常。如果我嘗試 ArrayList,它也可以正常工作。我怎么解決這個問題?</p><p> 我的代碼類似於:</p><pre> @XmlRootElement public class SomeClass { @XmlElement(name="part") private final ArrayList&lt;Object&gt;[] list; ... constructor, which fills the list variable }</pre><p> 有人可以告訴我該怎么做嗎? 請。<br><br></p></div></object>

[英]How to marshall ArrayList<Object>[] in JAXB?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM