Non ho potuto ottenere @XmlValue
lavorando come sempre ho ottenuto NullPointerException
lungo la strada, non so perché. Invece, mi è venuto in mente qualcosa del genere.
cadere il vostro classe Bar
del tutto, perché, come si vuole che sia in grado di contenere qualsiasi cosa si può semplicemente rappresentare 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() {}
}
Senza dirlo JAXB che i namespace tue tipi stanno usando ogni bar
elemento all'interno di un foo
conterrebbe dichiarazioni di namespace separati e roba-the package-info.java
e tutta la roba namespace serve solo solo fancification scopi.
@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;
L'esecuzione di questo semplice test genererebbe uno sdoganamento simile al proprio snippet 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);
}
uscita:
<?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>
fonte
2012-01-17 06:52:21
Ciò richiederebbe la conversione di dati opachi binari in una stringa, ad es., Devo codificarli manualmente in es. HexBinary o base64. Ma sì, questo è quello che sto attualmente usando come soluzione alternativa. –
Stai utilizzando il tuo algoritmo di codifica? Dovrebbe essere abbastanza indolore se si utilizza il codificatore [apache commons] (http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html). –
Sto usando [HexBinaryAdapter] (http://docs.oracle.com/javaee/5/api/javax/xml/bind/annotation/adapters/HexBinaryAdapter.html) che alt. commons classe base64, entrambe che sono belle one-liner. –