Set an XJC javaType adapter in external binding file
14,855
Change your xsd in
<xsd:complexType name="Certificate">
<xsd:sequence>
<xsd:element name="certificate" type="xsd:base64Binary"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="User">
<xsd:sequence>
<xsd:element name="certificate" type="xsd:base64Binary"/>
<xsd:element name="name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Server">
<xsd:sequence>
<xsd:element name="document" type="xsd:base64Binary" />
</xsd:sequence>
</xsd:complexType>
and add this binding configuration
<bindings version="2.0" xmlns="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:annox="http://annox.dev.java.net"
xmlns:namespace="http://jaxb2-commons.dev.java.net/namespace-prefix">
<bindings schemaLocation="yourXSD.xsd">
<bindings node="//xsd:complexType[@name='Certificate']//xsd:sequence//xsd:element[@name='certificate']">
<xjc:javaType name="java.security.cert.X509Certificate" adapter="adapters.X509CertificateAdapter" />
</bindings>
<bindings node="//xsd:complexType[@name='User']//xsd:sequence//xsd:element[@name='certificate']">
<xjc:javaType name="java.security.cert.X509Certificate" adapter="adapters.X509CertificateAdapter" />
</bindings>
</bindings>
</bindings>
Author by
Roman Kos
Updated on June 04, 2022Comments
-
Roman Kos almost 2 years
I've an XSD file containing this:
<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> <xsd:complexType name="User"> <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:element name="name" type="xsd:string"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="Server"> <xsd:sequence> <xsd:element name="document" type="xsd:base64Binary" /> </xsd:sequence> </xsd:complexType>
I would like to export xjc javaType adapter to an external .xjb file. In this file, I would like to set this adapter for all
certificate
elements withxsd:base64Binary
type but not fordocument
element inServer
complex type which also hasxsd:base64Binary
type.How can I do it?
-
Roman Kos almost 10 yearsYes it's pretty much what I expected as solution, node by node. But is it possible to put it in
globalBindings
to avoid repeating it every time I will add a newcertificate
element ? -
Xstian almost 10 yearsYes it is using <bindings version="2.0" xmlns="java.sun.com/xml/ns/jaxb" xmlns:xsd="w3.org/2001/XMLSchema" xmlns:xjc="java.sun.com/xml/ns/jaxb/xjc" xmlns:annox="annox.dev.java.net"> <globalBindings> <xjc:javaType xmlType="xsd:base64Binary" name="java.security.cert.X509Certificate" adapter="adapters.X509CertificateAdapter" /> </globalBindings> </bindings>
-
Roman Kos almost 10 yearsBut in this case all
xsd:base64Binary
will use the adapter, even the elementdocument
in complex typeServer
, which I don't want in this case. -
Xstian almost 10 yearsyes ... global binding is for each xmlType, i think that in your case is better the first solution.