去掉CXF自动生成的@xsi.type属性

当使用CXF生成接口时,如果使用了泛型类型,并添加了注解@XmlSeeAlso,那么生成的接口会自动生成一个属性@xsi.type去显示当前泛型实例的Entity的类型,为了解决这个问题,可以把泛型类中暴露的属性注解从@XmlElement改成@XmlElementRef。对于@XmlElementRef注解的官方解释如下:

If you use @XmlElementRef on the list property then the element for the item will be based on the @XmlRootElement of the referenced class and then you won't get the xsi:type attibute.

译文:如果你在列表属性中使用@xmlelementRef,那么该类的元素将基于被引用的类的@xmlrootelement,然后你就不会得到xsi:type属性。

具体代码如下:

@XmlRootElement(name = "result")
@XmlAccessorType(XmlAccessType.NONE)
@XmlSeeAlso
		({	
			ClassA.class 
		})
public class XResponseDataList extends XBaseVo
{
	private LinkedList m_objDataList;

	/**
	 * If you use @XmlElementRef on the list property then the element for the item will be based on the @XmlRootElement of the referenced class and then you won't get the xsi:type attibute.
	 */
	@XmlElementRef
	public LinkedList getDatas()
	{
		return m_objDataList;
	}

	public void setDatas(LinkedList objDataList)
	{
		setTotalCount(objDataList.size());
		m_objDataList = objDataList;
	}
}

 

@XmlRootElement(name="classA")
@XmlAccessorType(XmlAccessType.NONE)
public class ClassA
{
	public ClassA()
	{
		initialize();
	}
	
	private void initialize()
	{
		
	}
    //...
}

 

@XmlAccessorType(XmlAccessType.NONE)
public class XBaseVo
{
	/**
	 * 接口调用成功状态码
	 */
	public static final String X_SUCCESS_CODE = "0";
	/**
	 * 接口调用成功信息
	 */
	private static final String X_SUCCESS_MSG = "处理成功";
	/**
	 * 接口调用失败状态码
	 */
	public static final String X_ERROR_CODE = "-1";

	/**
	 * 返回码:0:成功;-1:失败,默认值为:0
	 */
	private String m_StrResultCode = X_SUCCESS_CODE;
	/**
	 * 返回码信息,默认值为:查询成功
	 */
	private String m_strResultInfo = X_SUCCESS_MSG;

	/**
	 * 总条数
	 */
	private int m_nTotalCount;

    //getter...setter
}

最终生成的接口数据部分内容如下:

去掉CXF自动生成的@xsi.type属性_第1张图片 

 

你可能感兴趣的:(java,注解,CXF)