我想将传入的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>
显然我的元素定义是错误的。任何帮助非常感谢。感谢。
答案 0 :(得分: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);
}
}