XSD javaType适配器导致其他语言

时间:2014-07-22 12:41:51

标签: java c# jaxb xsd adapter

我有一个包含以下内容的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#类(例如)会是什么样的?

1 个答案:

答案 0 :(得分:2)

您应该使用所使用的技术尽可能保持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