gpt4 book ai didi

java - 无论如何,使用 JAXBIntrospector 而不进行 Jaxb 解码的类强制转换

转载 作者:行者123 更新时间:2023-12-02 02:15:39 27 4
gpt4 key购买 nike

我喜欢在我的代码中没有警告,但是这个 jaxb 类运行良好,由于缺乏 jdk 方法变体,确实给出了常见的类强制转换警告。有没有办法支持所有 jaxb 转换而不会收到此警告。我使用 JAXBIntrospector 而不仅仅是 Unmarshaller,因为某些仅使用 unmarshaller 的 jaxb 类会引发错误。

这里是示例代码:

public static <T> T unmarshall( final String xml , final Class<T> clazz ) throws Exception
{
T rtn = null;
JAXBContext jaxbContext;
jaxbContext = jaxbContextCache.get( clazz );
if ( jaxbContext == null )
{
jaxbContext = JAXBContext.newInstance( Class.forName( clazz.getName() ) );
jaxbContextCache.put( clazz , jaxbContext );
}
final Reader reader = new StringReader(xml);
final XMLInputFactory xif = XMLInputFactory.newInstance();
xif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, Boolean.FALSE);
xif.setProperty(XMLInputFactory.SUPPORT_DTD, Boolean.FALSE);
final XMLStreamReader xmlReader = xif.createXMLStreamReader(reader);
final Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
rtn = (T) JAXBIntrospector.getValue( unmarshaller.unmarshal( xmlReader ) ); // warning cast conversion
return rtn;
}

最佳答案

如果你知道 T 的类,您可以解码 JAXBElement<T>并返回值。大致思路是这样的:

JAXBElement<T> element = unmarshaller.unmarshal(xmlReader, clazz);
return element.getValue();

您不需要JAXBIntrospector为了这。

关于java - 无论如何,使用 JAXBIntrospector 而不进行 Jaxb 解码的类强制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49340623/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com