JAXB(JSR-222)の実装では、それぞれの複合型のクラスが生成されます。このクラスのインスタンスは、その型の属性/要素に対応する任意のフィールド/プロパティで設定できるため、これは良好です。名前付き複合型の場合、それらを参照するグローバル要素は、ObjectFactoryクラスのメタデータとして取得されます。
schema.xsd以下
は、あなたのXMLスキーマのやや単純化したバージョンです:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org"
xmlns:ns1="http://www.example.org" elementFormDefault="qualified">
<element name="subscriber" type="ns1:CreateSubscriberType" />
<element name="systemSubscriber" type="ns1:CreateSubscriberType" />
<complexType name="CreateSubscriberType">
<annotation>
<documentation>bla bla bla</documentation>
</annotation>
<sequence/>
</complexType>
</schema>
XJCコール
xjc -d out -p forum8941337 schema.xsd
CreateSubscriberType
以下は
複合型用に生成されたクラスです。
package forum8941337;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "CreateSubscriberType")
public class CreateSubscriberType {
}
を生成ObjectFactory
クラスが@XmlElementDecl
これらは、あなたのXMLに2つのグローバル要素に対応して、注釈付き2つのcreate
のメソッドが含まれていたObjectFactory
スキーマジョダへのdateTime:外部カスタムバインディングはXSから追加されたときに
package forum8941337;
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 _Subscriber_QNAME = new QName("http://www.example.org", "subscriber");
private final static QName _SystemSubscriber_QNAME = new QName("http://www.example.org", "systemSubscriber");
public ObjectFactory() {
}
public CreateSubscriberType createCreateSubscriberType() {
return new CreateSubscriberType();
}
@XmlElementDecl(namespace = "http://www.example.org", name = "subscriber")
public JAXBElement<CreateSubscriberType> createSubscriber(CreateSubscriberType value) {
return new JAXBElement<CreateSubscriberType>(_Subscriber_QNAME, CreateSubscriberType.class, null, value);
}
@XmlElementDecl(namespace = "http://www.example.org", name = "systemSubscriber")
public JAXBElement<CreateSubscriberType> createSystemSubscriber(CreateSubscriberType value) {
return new JAXBElement<CreateSubscriberType>(_SystemSubscriber_QNAME, CreateSubscriberType.class, null, value);
}
}
デモ
package forum8941337;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance("forum8941337");
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
CreateSubscriberType subscriberType = new CreateSubscriberType();
ObjectFactory objectFactory = new ObjectFactory();
// System Subscriber
JAXBElement<CreateSubscriberType> systemSubscriber = objectFactory.createSystemSubscriber(subscriberType);
marshaller.marshal(systemSubscriber, System.out);
// Subscriber
JAXBElement<CreateSubscriberType> subscriber = objectFactory.createSubscriber(subscriberType);
marshaller.marshal(subscriber, System.out);
}
}
出力
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<systemSubscriber xmlns="http://www.example.org"/>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<subscriber xmlns="http://www.example.org"/>
"resutがありません"のようなフレーズは使用しないでください。それが何をしているのかを教えてください。それから代わりに何をしたいのかを説明してください。 – skaffman
mavenプラグインは、各要素に別々のクラスを生成する必要があります。 – Mirian
いいえ、それは真実ではなく、それぞれのタイプのクラスを生成します。 – skaffman