我一直在使用Metro,遇到了一个问题,即wsgen似乎忽略了我在web方法响应类上添加的任何JAXB注释。
我正试图返回一组实体类,这些实体类我想通过web服务向外部客户端公开,但我只想让某些类属性和方法对外部客户端可见,所以我将类访问类型设置为PROPERTY,并用@XmlElement注释了我想成为该类XML版本一部分的所有属性。
我可以使用schemagen-ant任务为实体类创建XML模式,它正确地忽略了我没有用@XmlElement注释的任何属性或方法,但是,当我运行wsgen为web服务创建wsdl时,该web服务具有返回实体类集的方法,然后我得到一个java.lang.NoClassDefFoundError。这似乎是因为wsgen没有忽略实体类上它应该做的公共方法,异常引用的类是该方法的参数。
我曾尝试用@XmlTransient注释该方法,以便wsgen忽略它,但没有成功。如果有人能建议我应该做些什么来让wsgen关注我的注释,那就太好了。
无论访问器类型如何,都将始终处理带注释的字段/属性。如果只希望将带注释的字段/属性视为映射,则需要指定@XmlAccessorType(XmlAccessType.NONE)
。
有关更多信息
- http://blog.bdoughan.com/2012/04/jaxb-and-unmapped-properties.html