1

我想将传入的 XML 绑定到 JavaType

<?xml version="1.0" encoding="UTF-8"?>
<apiKeys uri="http://api-keys">
<apiKey uri="http://api-keys/1933"/>
<apiKey uri="http://api-keys/19334"/>
</apiKeys>

我希望使用 JAXB,所以我定义了一个 XSD。我的 XSD 不正确,并且创建的对象(在创建时)是空的。

我的 XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="apiKeys" type="ApiKeysResponseInfo2" />

<xsd:complexType name="ApiKeysResponseInfo2">
<xsd:sequence>
<xsd:element name="uri" type="xsd:anyURI" minOccurs="1" maxOccurs="1">
</xsd:element>
<xsd:element name="apiKey" type="xsd:anyURI" minOccurs="1" maxOccurs="unbounded">
</xsd:element>
</xsd:sequence>
</xsd:complexType>  
</xsd:schema>

显然我的元素定义是错误的。非常感谢任何帮助。谢谢。

4

1 回答 1

1

我希望使用 JAXB,所以我定义了一个 XSD。

JAXB 不需要 XML 模式。我们将其设计为从 Java 对象开始,添加了从 XML 模式生成带注释模型的能力作为一种便利机制。


我想将传入的 XML 绑定到 JavaType

您可以使用下面的对象模型:

ApiKeys

import java.util.List;
import javax.xml.bind.annotation.*;

@XmlRootElement
public class ApiKeys {

    private String uri;
    private List<ApiKey> apiKey;

    @XmlAttribute
    public String getUri() {
        return uri;
    }

    public void setUri(String uri) {
        this.uri = uri;
    }

    public List<ApiKey> getApiKey() {
        return apiKey;
    }

    public void setApiKey(List<ApiKey> apiKey) {
        this.apiKey = apiKey;
    }

}

ApiKey

import javax.xml.bind.annotation.XmlAttribute;

public class ApiKey {

    private String uri;

    @XmlAttribute
    public String getUri() {
        return uri;
    }

    public void setUri(String uri) {
        this.uri = uri;
    }

}

演示

import java.io.File;
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(ApiKeys.class);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        File xml = new File("src/forum14643483/input.xml");
        ApiKeys apiKeys = (ApiKeys) unmarshaller.unmarshal(xml);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(apiKeys, System.out);
    }

}
于 2013-02-01T10:02:52.873 回答