0

.xsd ファイルから JibX によって自動生成された ObjectClass というクラスがあります。クラス名の問題を防ぐために、このクラスは次のような独自のパッケージに格下げされました。

com.CompanyName.ProductName.SDK.Device.GetCommandsResponse.ObjectClass

このクラスは、意図したとおりにバインドおよびバインド解除します。

上記のクラスを拡張する空のクラスを作成したいのですが、新しいクラスは元の ObjectClass バインディングを使用して正しくバインドおよびアンバインドされるのでしょうか? それとも、この新しい拡張機能に対して一意のバインディングを作成する必要がありますか?

新しいクラスはこれに似ています

public class deviceGetCommandsResponse extends 
com.CompanyName.ProductName.SDK.Device.GetCommandsResponse.ObjectClass
{
   /// This is empty
}

この目的は、一意の名前を提供することで、これらのオブジェクトのキャストをサード パーティの開発者にとってより簡単に/手間をかけないようにすることです。

だから代わりに

(com.CompanyName.ProductName.SDK.Device.GetCommandsResponse.ObjectClass) SomeReturnFromAMethod

彼らは使用することができます

(deviceGetCommandsResponse) SomeReturnFromAMethod;

すべて同じ機能を備えています。

より広い意味で、JibX で生成されたクラスのアダプタ パターンを作成するにはどうすればよいでしょうか?

4

1 に答える 1

0

あなたの質問に対する答えはイエスです。JiBX は拡張クラスで問題なく動作します。

これを行う前に、次のオプションを検討します。

まず、デフォルトのパッケージ名は名前空間の URL の場所であり、デフォルトのクラス名はほとんどのバインディングに最適な最上位の要素です。

たとえば、スキーマ定義が次の場合:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.jibx.org/sampleschema/person" elementFormDefault="qualified" targetNamespace="http://www.jibx.org/sampleschema/person">
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstName" type="xs:string"/>
<xs:element name="lastName" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

生成されるクラスは次のようになります。

package org.jibx.sampleschema.person;
public class Person
{
    private String firstName;
    private String lastName;
    ...

コードは次のようになります。

Person person = new Person();
person.setFirstName("Don");

これは非常に論理的で、非常にクリーンです。特にパブリック スキーマ定義を使用している場合は、グローバルに一意のクラス名を使用すると非常に便利です。バインドをオープン ソースとしてリリースすると、同じスキーマを使用する他のユーザーの時間を節約できます。

デフォルトが受け入れられない場合は、JiBX 構成を設定することで、パッケージやクラス名を簡単に変更できます。

これが役立つことを願っています!

Don Corley
JiBX 寄稿者

于 2013-06-05T15:51:46.470 に答える