0

我有一个名为 ObjectClass 的类,它是由 JibX 从 .xsd 文件自动生成的。为了防止类名问题,该类已降级到自己的包中,例如

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 配置更改包和/或类名非常容易。

我希望这有帮助!

唐·科利
JiBX 贡献者

于 2013-06-05T15:51:46.470 回答