XmlAdapter para base64Binary resultados en String
jaxb xsd (2)
Esta clase "adapters.X509CertificateAdapter" declara dos métodos:
public X509Certificate unmarshal(String certificateBase64String) throws Exception;
public String marshal(X509Certificate certificate) throws Exception;
La primera declaración necesita una cadena para desempaquetar un certificado X509. De esta forma, puede usar directamente un Certificado X509.
Espero haberles dado todas las respuestas sobre su pregunta
Tengo un archivo XSD que contiene esto:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jaxb:extensionBindingPrefixes="xjc"
elementFormDefault="qualified"
targetNamespace="http://example.org/">
<xsd:complexType name="Certificate">
<xsd:sequence>
<xsd:element name="certificate" type="xsd:base64Binary">
<xsd:annotation>
<xsd:appinfo>
<xjc:javaType name="java.security.cert.X509Certificate" adapter="adapters.X509CertificateAdapter" />
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
y cuando genero código java con xjc, produce esto:
public class Certificate {
@XmlElement(required = true, type = String.class)
@XmlJavaTypeAdapter(X509CertificateAdapter.class)
@XmlSchemaType(name = "base64Binary")
protected X509Certificate certificate;
....
}
y el adaptador funciona bien
Mi pregunta es por qué @XmlElement(required = true, type = String.class) ? ¿Por qué type = String.class y no byte[] ?
Para el siguiente:
@XmlElement(required = true, type = String.class)
@XmlJavaTypeAdapter(X509CertificateAdapter.class)
@XmlSchemaType(name = "base64Binary")
protected X509Certificate certificate;
Hay algunas cosas a tener en cuenta:
- La configuración de
typeen@XmlElementes redundante ya que elX509CertificateAdapterya especifica que, a los fines de ordenar y desasignar, convertiráX508Certificateen / desde unaString. - El
X509CertificateAdapterconvierte en / desde unaStringlugar de unbyte[]más probable para el rendimiento, ya que una conversión a unbyte[]haría que JAXB realice una conversión adicional aStringpara representarlo correctamente en el XML. - La anotación
@XmlSchemaTypese utiliza para garantizar que cuando se genere un esquema XML, el tipo de nodo aparezca comobase64Binaryy no comostring.