一般的な情報をFlexクライアントからWSDLを消費:継承型で
- 私は、私はGlassFishの3.1を経由してJAX-WS 2.2を(使用してWSDLを生成FlashBuilder 4
- を使用するFlex 4.5
- を使用AS)
クライアントのリストを返すWebサービスが必要です。 Javaコードで 、私はクライアントのための基本クラスを持って、そして2つの拡張クラス:
public class Client {
public String getName() {
return this.name;
}
}
public class AdvisedClient extends Client {
public String getFoo() {
return this.foo;
}
}
public class NotAdvisedClient extends Client {
public String getBar() {
return this.bar;
}
}
は、これらのクラスはPOJOです。
Webサービスは、次のようになります。
public class ClientsModel {
public List<Client> getClients() {
return this.clients;
}
}
@WebService
public class ClientService {
@WebMethod
public ClientsModel getClients(String bla) {
...
}
}
私は、最終的なWSDLでの継承を表現するために、次の方法を使用しようとしました:
http://bdoughan.blogspot.com/2010/11/jaxb-and-inheritance-using-substitution.html
(ここで私はすべての3つのクラスを注釈付き@XmlRootElementを使用してClientsModelに@XmlRootElementを注釈付けし、ClientsModel.getClients()に@XmlElementRefを注釈付けし、さらにClientsModelに@XmlSeeAlsoという注釈を付けて、JAXBContextがAdvisedClientクラスとNotAdvisedClientクラス)。
http://bdoughan.blogspot.com/2010/11/jaxb-and-inheritance-using-xsitype.html
(ここで私は@XmlRootElementのみクライアント・クラスを注釈付き、そしてそのまま延びるクラスを残し、また@XmlElementRef注釈を削除)。
は、最初のアプローチ(置換)のために、私は次のスキーマ得た:
<xs:complexType name="ClientsModel">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="tns:AdvisedClient" />
<xs:element ref="tns:NotAdvisedClient" />
</xs:choice>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Client">
<xs:sequence>
<xs:element name="name" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="AdvisedClient">
<xs:complexContent>
<xs:extension base="tns:Client">
<xs:sequence>
<xs:element name="foo" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="NotAdvisedClient">
<xs:complexContent>
<xs:extension base="tns:Client">
<xs:sequence>
<xs:element name="bar" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
をそして私は、ウィザードのWebサービスに接続する "FlashBuilderのを使用する場合、私はadvisedClientのプロパティが含まれているClientsModelクラスを持って、 notAddedClientの別のものですが、リストではありません!
は、その後、私は第二のアプローチを試みたが、次のスキーマました:クライアントのためのcomplexTypeのに対し
<xs:complexType name="ClientsModel">
<xs:sequence>
<xs:element name="clients" type="tns:Client" nillable="true" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
を、AdvisedClientとNotAdvisedClientは同じまま。
はFlashBuilderを使用してActionScriptでクラスを生成した後、私はこの時間は
は、JAXBを使用してスキーマを制御する別の方法がある...ないAdvisedClientまたはNotAdvisedClientで、唯一のClientクラスバインドさだように継承お返事ありがとうございます。
残念ながら、AS生成クラスについて詳しくはありません。 私はリストを意味しませんでした。私は、生成されたClientsModelクラスにList/array/ArrayCollectionなどが含まれていないということを意味していました。 AdvisedClientには単一のプロパティが、NotAdachedClientには単一のプロパティが含まれます。
生成されたクラスは非常に複雑ですが、私はそれを簡素化しようとします:
public class _Super_ClientsModel extends flash.events.EventDispatcher implements com.adobe.fiber.valueobjects.IValueObject {
private var _internal_client : com.company.product.clients.valueObjects.Client;
private var _internal_advisedClient : com.company.product.clients.valueObjects.AdvisedClient;
private var _internal_notAdvisedClient : com.company.product.clients.valueObjects.NotAdvisedClient;
}
のget関数は、それぞれそれらを返します。
これで、生成されたクラスが期待通りではないことがわかりました。それは私が扱えるものではありません。あなたはクラス全体がここに関連すると思われる場合 は、私はFlexでListは、UI要素である、
おかげで再び...あまりにも ダニエル