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 = "SUBMIT_DATE")
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar submitdate;

@XmlElement(name = "RESERVED_1", required = true, nillable = true)
protected String reserved1;

@XmlElement(name = "RESERVED_2", required = true, nillable = true)
protected String reserved2;

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

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


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

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

找了一下还真有:@XmlTransient

Prevents the mapping of a JavaBean property/type to XML representation.

The @XmlTransient annotation is useful for resolving name collisions between a JavaBean property name and a field name or preventing the mapping of a field/property.

阻止JavaBean的property映射:

@XmlElement(name = "SUBMIT_DATE")
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar submitdate;

@XmlElement(name = "RESERVED_1", required = true, nillable = true)
protected String reserved1;

@XmlElement(name = "RESERVED_2", required = true, nillable = true)
protected String reserved2;

@XmlTransient
private String pkMsg;

问题解决。

===补充====================================

当值为null时依然需要在xml保留属性,nillable默认为false

使用@XmlElement(name = "",nillable = true)

针对List类型的元素使用@XmlElementWrapper(nillable = true)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wsdhla

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值