在java中表示“choice”命名空间标记的最佳方法是什么? 即
<xs:complexType name="MyType">
<xs:sequence>
<!-- common elements here -->
<xs:element type="xs:string" name="name" ... />
</xs:sequence>
<xs:choice>
<xs:element name="stringValue" type="xs:string"></xs:element>
<xs:element name="intValue" type="xs:int"></xs:element>
</xs:choice>
</xs:complexType>
如何在Java中对此进行建模?我在考虑类似的事情:
public class MyType
String name;
String stringValue;
int intValue;
...
但这肯定不是最好的方法,或者我错了?另外,如果我想使用Axis2公开使用该类型的服务,我是否需要实现一些自定义消息接收器?
答案 0 :(得分:1)
我们通常使用jaxb或其他一些绑定机制(在axis2中有几个)将xsd转换为Java对象。那些生成的对象与您所显示的完全相同:即,选项中的所有属性都存在,并且您没有看到任何指示其中只有一个可以存在的内容。如果您要将这些内容翻译回xml,那么只有在您启用验证时才会注意到这一点。如果您意识到不应该在Java中同时设置两个变体,那么选择没有问题 - 结果有时甚至可能是它们都没有进入生成的XML。