Как создать экземпляр элемента xsd абстрактного типа
Я программист java, новый для XML и веб-служб. Я пытаюсь создать xml-документ, соответствующий XSD (который я не писал), который содержит приведенный ниже фрагмент. Что я хочу сделать, это вызвать этот веб-сервис для копирования рассылки. Существует элемент под названием copy, который имеет абстрактный тип "tns: CopyRequest". Поскольку тип элемента является абстрактным, Eclipse говорит мне, что я не могу его создать. Есть тип CopyMailingRequest (который звучит так, как будто это то, что я хочу), но я не уверен, как создайте его экземпляр, так как нет элемента, который расширяет этот тип. Что я упускаю?
<xs:element name="copy" nillable="true" type="tns:CopyRequest"/>
<xs:complexType name="CopyMailingRequest">
<xs:complexContent>
<xs:extension base="tns:CopyRequest">
<xs:sequence>
<xs:element name="fromId" type="tns:MailingId"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="StandardMailingId">
<xs:complexContent>
<xs:extension base="tns:MailingId"/>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="MailingId">
<xs:complexContent>
<xs:extension base="tns:ObjectId"/>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="CopyRequest" abstract="true">
<xs:sequence>
<xs:element name="newName" type="xs:string"/>
</xs:sequence>
</xs:complexType>
1 ответов
чтобы было проще следовать, ниже приведена минимально измененная схема (добавлен элемент схемы с произвольным targetNamespace и добавлено фиктивное определение для ObjectId):
<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" xmlns:tns="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="copy" nillable="true" type="tns:CopyRequest"/>
<xs:complexType name="CopyMailingRequest">
<xs:complexContent>
<xs:extension base="tns:CopyRequest">
<xs:sequence>
<xs:element name="fromId" type="tns:MailingId"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="StandardMailingId">
<xs:complexContent>
<xs:extension base="tns:MailingId"/>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="MailingId">
<xs:complexContent>
<xs:extension base="tns:ObjectId"/>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ObjectId"/>
<xs:complexType name="CopyRequest" abstract="true">
<xs:sequence>
<xs:element name="newName" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Это то, что автоматически (и действительный) сгенерированный образец XML будет выглядеть для XSD:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<copy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CopyMailingRequest" xmlns="http://tempuri.org/XMLSchema.xsd">
<newName>newName1</newName>
<fromId/>
</copy>
главное xsi:type="CopyMailingRequest"
; Так вы предоставляете конкретный тип в своем сценарии.