论坛首页 Java企业应用论坛

<xs:choice>利用CXF2.3生成javaBean

浏览 2891 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-07-19  
SOA
环境:
windows XP, jdk1.6, CXF2.3

test.wsdl文件:
<xs:complexType name="CalendarTime">
    <xs:sequence>
        <xs:choice>
	    <xs:element name="day" type="xs:unsignedInt"/>
	    <xs:element name="week" type="xs:unsignedInt"/>
	</xs:choice>
        <xs:element name="seconds" type="xs:unsignedInt"/>
    </xs:sequence>
</xs:complexType>

利用CXF2.3的wsdl2java命令生成javaBean如下:
public class CalendarTime {
    @XmlSchemaType(name = "unsignedInt")
    protected Long day;
    @XmlSchemaType(name = "unsignedInt")
    protected week week;
    @XmlSchemaType(name = "unsignedInt")
    protected long seconds;
    ......
}

wsdl中day、week、seconds同样定义为type="xs:unsignedInt",生成的javaBean的类型却不同:
day---Long
week--Long
seconds--long

后来实验发现:<xs:choice>包含的类型都会生成基本类型封装类,而在<xs:choice>之外的则生成基本类型。

不知道这是为什么,有哪位高人指点一下?
   发表时间:2011-07-19  
<xs:choice> 
        <xs:element name="day" type="xs:unsignedInt"/> 
        <xs:element name="week" type="xs:unsignedInt"/> 
</xs:choice> 
这4行能看懂吗?

这些的意思是说day与week里面只能够存在一个,
那好 既然只能够存在一个,
public class CalendarTime { 
    @XmlSchemaType(name = "unsignedInt") 
    protected Long day; 
    @XmlSchemaType(name = "unsignedInt") 
    protected week week; 
    @XmlSchemaType(name = "unsignedInt") 
    protected long seconds; 
    ...... 


这个类中
@XmlSchemaType(name = "unsignedInt") 
    protected Long day; 
    @XmlSchemaType(name = "unsignedInt") 
    protected week week;
这两个变量只能存在一个,
即:day!=null时,week=null;
   week!=null时,day=null;

如果换成基本类型那么 long day; 这里day的默认值为0, week同理,
怎么 确定 这两个变量里面应该是存在哪个 啊
0 请登录后投票
   发表时间:2011-07-19  
呵呵,一言点醒梦中人诶。。好!
不过有个疑问,怎样才能在</xs:choice> 之外生成Long封装类型呢?
0 请登录后投票
   发表时间:2011-07-20   最后修改:2011-07-20
这个是xsd中jaxb类型映射的问题了,
可以看下:
http://maomaode.iteye.com/blog/102018

如果楼主不懂的话,需要看下jaxb了
0 请登录后投票
   发表时间:2011-07-21  
谢了,兄弟
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics