Java Language
XJC
サーチ…
前書き
XJCは、XMLスキーマファイルを完全に注釈付きのJavaクラスにコンパイルするJava SEツールです。
これはJDKパッケージ内で配布され、 /bin/xjc
pathにあります。
構文
- xjc [options]スキーマファイル/ URL / dir / jar ... [-b bindinfo] ...
パラメーター
パラメータ | 詳細 |
---|---|
スキーマファイル | javaに変換するxsdスキーマファイル |
備考
XJCツールは、JDKの一部として使用できます。これにより、(un)マーシャリングに適したJAXBアノテーションで注釈が付けられたJavaコードを作成することができます。
単純なXSDファイルからJavaコードを生成する
XSDスキーマ(schema.xsd)
次のxmlスキーマ(xsd)は、属性name
とreputation
持つユーザーのリストを定義します。
<?xml version="1.0"?>
<xs:schema version="1.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ns="http://www.stackoverflow.com/users"
elementFormDefault="qualified"
targetNamespace="http://www.stackoverflow.com/users">
<xs:element name="users" type="ns:Users"/>
<xs:complexType name="Users">
<xs:sequence>
<xs:element type="ns:User" name="user" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="User">
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="reputation" use="required">
<xs:simpleType>
<xs:restriction base="xs:int">
<xs:minInclusive value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:schema>
xjcの使用
これには、OSパス変数にxjcツール(JDKバイナリ)へのパスが必要です。
コードの生成は、
xjc schema.xsd
これにより、作業ディレクトリにjavaファイルが生成されます。
結果ファイル
追加のコメントがいくつかありますが、基本的に生成されるjavaファイルは次のようになります。
package com.stackoverflow.users;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Users", propOrder = {
"user"
})
public class Users {
protected List<User> user;
public List<User> getUser() {
if (user == null) {
user = new ArrayList<User>();
}
return this.user;
}
}
package com.stackoverflow.users;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "User")
public class User {
@XmlAttribute(name = "name", required = true)
protected String name;
@XmlAttribute(name = "reputation", required = true)
protected int reputation;
public String getName() {
return name;
}
public void setName(String value) {
this.name = value;
}
public int getReputation() {
return reputation;
}
public void setReputation(int value) {
this.reputation = value;
}
}
package com.stackoverflow.users;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlElementDecl;
import javax.xml.bind.annotation.XmlRegistry;
import javax.xml.namespace.QName;
@XmlRegistry
public class ObjectFactory {
private final static QName _Users_QNAME = new QName("http://www.stackoverflow.com/users", "users");
public ObjectFactory() {
}
public Users createUsers() {
return new Users();
}
public User createUser() {
return new User();
}
@XmlElementDecl(namespace = "http://www.stackoverflow.com/users", name = "users")
public JAXBElement<Users> createUsers(Users value) {
return new JAXBElement<Users>(_Users_QNAME, Users.class, null, value);
}
}
package-info.java
@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.stackoverflow.com/users", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package com.stackoverflow.users;
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow