xml jaxb xsd adapter xjc

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:

  1. La configuración de type en @XmlElement es redundante ya que el X509CertificateAdapter ya especifica que, a los fines de ordenar y desasignar, convertirá X508Certificate en / desde una String .
  2. El X509CertificateAdapter convierte en / desde una String lugar de un byte[] más probable para el rendimiento, ya que una conversión a un byte[] haría que JAXB realice una conversión adicional a String para representarlo correctamente en el XML.
  3. La anotación @XmlSchemaType se utiliza para garantizar que cuando se genere un esquema XML, el tipo de nodo aparezca como base64Binary y no como string .