我生成基于web服务的一个客户端JAXWS。 JAXB将使用java.lang.Boolean中代替基本类型的产生布尔值。 除此之外,它会产生的是()命名约定豆。
不过,如果我尝试布尔(如isOptional())链接到一个复选框,它会抛出以下异常:
value="#{property.optional}": Property 'optional' not readable on type java.lang.Boolean
我的谷歌技能已经通知我,JSF工作正常:
boolean isOptional()
boolean getOptional()
Boolean getOptional()
但不能与
Boolean isOptional()
然而,它是不可行的更新豆手动由于尺寸和web服务的量,那么有没有什么办法,使正常的JSF使用的java.lang.Boolean isOptional()? 或者,我可以采用某种定义在生成时的JAXB绑定文件中的属性,它神奇地产生“getOptional()”?
在阿里纳斯,下面做工作:
<h:selectBooleanCheckbox value="#{property.isOptional()}"/>
但是我不能真正推测更新的价值,因为它无法找到的制定者。
编辑 :我运行的是最新的JDK 7,“Java的版本”的输出:
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b05)
Java HotSpot(TM) Client VM (build 23.1-b03, mixed mode, sharing)
“的wsimport -version”的输出:
JAX-WS RI 2.2.4-b01
生成的代码:
public Boolean isOptional() {
return optional;
}
JAXB将使用java.lang.Boolean中代替基本类型的产生布尔值。 除此之外,它会产生的是()命名约定豆。
使用is
吸气用前缀java.lang.Boolean
是JAXB的一个已知的重大失误。 它已被固定在2.1.13版本被发布2010年4月了。 保持你的库是最新的。
另见本博客文章的一些背景。
大JAXB API大错
2006年9月15日
你得把它交给孙拧这一个。 这是一件事写一个不符合规范,当文档是作为一本教科书一样厚的软件。 举个例子来说,只是由W3C创造任何东西。 然而,这是非常糟糕的,当它是你自己的天赋,你不能跟随,特别是当它是它最有名的一部分。 这是正确的,太阳错过了自己的规格一英里时,他们创造了JAXB 2.0 API。 的JAXB 2.0编译器(XJC)错误地使用前缀“是”,而不是“获取”生成用于java.lang.Boolean的属性getter方法时。 而读取原始布尔值可以使用替代的方法JavaBean的规范规定“是”前缀,这种灵活性不延伸到它的布尔包装对应物。
8.3.2布尔属性
此外,对于布尔属性,我们允许的吸气剂的方法相匹配的图案:
public boolean is();
可以提供,而不是一个“get”方法这“是”的方法,也可能除了“get”方法来提供。 在任一情况下,如果“是”的方法是存在用于一个布尔属性然后,我们将使用“是”方法来读取的属性值。
一个例子布尔属性可能是:
public boolean isMarsupial(); public void setMarsupial(boolean m);
鉴于JAXB是一个代码生成框架,后面的代码生成框架的想法是,该代码是用来“原样”和此后不修改,这是一个相当大的“糟糕”。 虽然这个问题已经被报告,Sun的回答是“对不起,为时已晚。”
此行为是由规范治理,可惜它只是为时已晚的规范来改变现在。
在用户体验方面,由于自动装箱,我不认为这将是人们一个真正的问题。 是您正在使用内部检查,它缺少属性的问题? 太晚了? 不是一个真正的问题? 它的分解。 修理它! 我也不喜欢天真的说法,这可能不会影响框架。 嗯,是的,它会考虑其他项目也发生坚持规范(休眠,春天,MyFaces的,等等)
UPDATE:斯特沃斯拉夫告诉我,这已被固定在JAXB 2.1.13。 见JAXB-131的详细信息。 是啊!
JSF / EL没有过错这里。 它做的工作符合正确的JavaBeans规范 。
我不知道为什么最新和最伟大JAXB版本仍然会产生错误的方法,但我最后加入“-B-enableIntrospection”(按照固定它http://jaxb.java.net/2.2.4/docs/xjc的.html )到的wsimport通话。 这导致:
public Boolean getOptional() {
return optional;
}