Tôi không thể nhận được @XmlValue
làm việc như tôi luôn luôn có NullPointerException
trên đường đi — không chắc chắn lý do. Tôi đã đưa ra một cái gì đó như sau để thay thế.
Thả toàn bộ lớp học Bar
vì bạn muốn nó có thể chứa bất kỳ thứ gì bạn chỉ cần thể hiện nó với Object
.
@XmlRootElement(name = "foo", namespace = "http://test.com")
@XmlType(name = "Foo", namespace = "http://test.com")
public class Foo {
@XmlElement(name = "bar")
public List<Object> bars = new ArrayList<>();
public Foo() {}
}
Không nói JAXB mà không gian tên loại của bạn đang sử dụng mỗi bar
yếu tố bên trong một foo
sẽ chứa các khai báo không gian tên riêng biệt và các công cụ-the package-info.java
và tất cả những thứ namespace chỉ phục vụ duy nhất fancification mục đích.
@XmlSchema(attributeFormDefault = XmlNsForm.QUALIFIED,
elementFormDefault = XmlNsForm.QUALIFIED,
namespace = "http://test.com",
xmlns = {
@XmlNs(namespaceURI = "http://test.com", prefix = ""),
@XmlNs(namespaceURI = "http://www.w3.org/2001/XMLSchema-instance", prefix = "xsi"),
@XmlNs(namespaceURI = "http://www.w3.org/2001/XMLSchema", prefix = "xs")})
package test;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
Chạy thử nghiệm đơn giản này sẽ tạo ra một thứ gì đó tương tự như đoạn mã XML của bạn.
public static void main(String[] args) throws JAXBException {
JAXBContext context = JAXBContext.newInstance(Foo.class);
Foo foo = new Foo();
foo.bars.add("a");
foo.bars.add("b".getBytes());
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.marshal(foo, System.out);
}
Output:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<foo xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://test.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<bar xsi:type="xs:string">a</bar>
<bar xsi:type="xs:base64Binary">Yg==</bar>
</foo>
Nguồn
2012-01-17 06:52:21
Điều đó sẽ yêu cầu tôi chuyển đổi dữ liệu nhị phân mờ thành Chuỗi, ví dụ: tôi phải mã hóa thủ công dữ liệu đó thành ví dụ: hexBinary hoặc base64. Nhưng có, đó là những gì tôi đang sử dụng như một cách giải quyết. –
Bạn có đang sử dụng thuật toán mã hóa của riêng mình không? Nó sẽ được khá đau nếu bạn sử dụng [apache commons encoder] (http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html). –
Tôi đang sử dụng [HexBinaryAdapter] (http://docs.oracle.com/javaee/5/api/javax/xml/bind/annotation/adapters/HexBinaryAdapter.html) mà alt. lớp cơ sở commons base64, cả hai đều là một lớp lót đẹp. –