其他语言的XSD javaType适配器结果

本文关键字:适配器 结果 javaType XSD 语言 其他 | 更新日期: 2023-09-27 18:14:00

我有一个包含以下内容的XSD文件:

<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>

,当我用xjc生成java代码时,它生成如下:

public class Certificate {
    @XmlElement(required = true, type = String.class)
    @XmlJavaTypeAdapter(X509CertificateAdapter.class)
    @XmlSchemaType(name = "base64Binary")
    protected X509Certificate certificate;
    ....
}

和适配器工作正常

我的问题是,当我将xsd给一个没有java的客户端时会发生什么?证书c#类(例如)会是什么样子?

其他语言的XSD javaType适配器结果

使用的技术应该使XSD文件尽可能干净。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
targetNamespace="http://example.org/">
<xsd:complexType name="Certificate">
    <xsd:sequence>
        <xsd:element name="certificate" type="xsd:base64Binary">
        </xsd:element>
    </xsd:sequence>
</xsd:complexType>
</xsd:schema>

java端,要生成额外的信息,应该使用绑定文件(XJB)。下面是添加注释的示例。

<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="../yourSchema.xsd">
        <bindings node="//xs:complexType[@name='User']">
            <annox:annotate>
                <annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement"
                    name="User">
                </annox:annotate>
            </annox:annotate>
        </bindings>
    </bindings>
</bindings> 
在这种情况下,您需要更改这个xsd以使其与其他系统兼容,因为您正在为java技术使用特定的名称空间。(即http://java.sun.com/xml/ns/jaxb/xjc)