0
点赞
收藏
分享

微信扫一扫

XML与JavaBean映射:忽略属性映射

XML映射JavaBean时,有时候会需要在模型类里面添加一些额外的业务属性,但这些属性不需要与XML元素进行映射,直接添加的话会报错。

以下异常信息是我在使用cxf时启动spring boot报错:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.apache.cxf.jaxws.EndpointImpl---443734936': Invocation of init method failed; nested exception is javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1786) ~[spring-beans-5.3.8.jar:5.3.8]

...
...

Caused by: javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException
	at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:375) ~[cxf-rt-frontend-jaxws-3.4.4.jar:3.4.4]

...
...

Caused by: org.apache.cxf.service.factory.ServiceConstructionException: null
	at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:361) ~[cxf-rt-databinding-jaxb-3.4.4.jar:3.4.4]

...
...

Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
	at com.sun.xml.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:76) ~[jaxb-runtime-2.3.4.jar:2.3.4]

只看异常信息没有明显的提示,但是隐约感觉是由于之前我在模型类里添加的业务属性引起的:。

@XmlElement(name = "RESERVED_1")
protected String reserved1;
@XmlElement(name = "RESERVED_2")
protected String reserved2;

// 自定义业务属性
private String pkMsg;

经过验证,去掉pkMsg,应用就正常启动,加上就报错。像这种情况,不想映射pkMsg应该怎么办?

现在这个场景是不是有点眼熟啊?

仔细想一想,我们在使用ORM框架时,实体类中增加业务属性不想被持久化的时候,会增加一个@Transient注解就可以解决,那XML映射有没有类似的呢?

找了一下还真有:@XmlTransient

阻止JavaBean的property映射:

@XmlElement(name = "RESERVED_1")
protected String reserved1;
@XmlElement(name = "RESERVED_2")
protected String reserved2;

@XmlTransient
private String pkMsg;

问题解决。

举报

相关推荐

0 条评论