No pude obtener @XmlValue
trabajando como siempre recibí NullPointerException
en el camino, no estoy seguro de por qué. En su lugar, se me ocurrió algo como lo siguiente.
Caída de su clase Bar
por completo, porque, como usted quiere que sea capaz de contener nada simplemente puede representar con 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() {}
}
Sin decirle JAXB el que los tipos de espacios de nombres están utilizando cada elemento dentro de un bar
foo
contendría declaraciones de espacios de nombres distintos y cosas por el package-info.java
y todas las cosas de espacio de nombres sólo sirve sólo fancification propósitos.
@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;
La ejecución de esta sencilla prueba arrojaría algo similar a su fragmento de XML.
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);
}
Salida:
<?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>
Eso requeriría convertir datos binarios opacos a una Cadena, por ejemplo, debo codificarla manualmente en, por ejemplo, hexBinary o base64. Pero sí, eso es lo que estoy usando actualmente como solución alternativa. –
¿Está utilizando su propio algoritmo de codificación? Debería ser bastante sencillo si usa el [codificador de Apache commons] (http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html). –
Estoy usando el [HexBinaryAdapter] (http://docs.oracle.com/javaee/5/api/javax/xml/bind/annotation/adapters/HexBinaryAdapter.html) que alt. clase commons base64, ambas son lindas con una línea. –