gpt4 book ai didi

java - JAXB 在解码后创建空的 TreeSet

转载 作者:行者123 更新时间:2023-11-29 09:20:35 26 4
gpt4 key购买 nike

我有一个 RESTful 服务客户端。服务返回 SortedSet<Movie> , 其中Movie是一个 JAXB 注释类。生成的 XML 如下所示。

在客户端,我有一个自定义 MessageBodyReader如下所示。问题是 Unmarshaller总是返回一个空的 TreeSet .

MovieSetMessageBodyReader.java :

@SuppressWarnings("unchecked")
@Override
public TreeSet<Movie> readFrom(Class<TreeSet<Movie>> type,
Type genericType, Annotation[] annotations, MediaType mediaType,
MultivaluedMap<String, String> httpHeaders, InputStream entityStream)
throws IOException, WebApplicationException {
Class<Movie> baseType = Types.getCollectionBaseType(type, genericType);

try {
JAXBContext ctx = JAXBContext.newInstance(type, baseType);
JAXBElement<?> element = ctx.createUnmarshaller().unmarshal(
new StreamSource(entityStream), type);

return (TreeSet<Movie>) element.getValue();
} catch (JAXBException e) {
e.printStackTrace();
}

return null;
}

MovieServiceRestEasyClient.java :

@GET
@Consumes("text/xml")
public SortedSet<Movie> sendRequestByProxy() {
Map<String, Object> requestAttributes = new HashMap<String, Object>();
requestAttributes.put("path", path);

MovieServiceRestEasy proxy = ProxyFactory.create(
MovieServiceRestEasy.class, ENDPOINT, requestAttributes);
ClientResponse<TreeSet<Movie>> response = (ClientResponse<TreeSet<Movie>>) proxy
.getMovieSet(path);
return response.getEntity(TreeSet.class, (new GenericType<TreeSet<Movie>>() {}).getGenericType());

}

XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<collection>
<movie>
<genre>Unknown</genre>
<name>4.3.2.1</name>
<year>2010</year>
</movie>
<movie>
<genre>Unknown</genre>
<name>Battlestar Galactica The Plan</name>
<year>2009</year>
</movie>
</collection>

最佳答案

为什么不使用 POJO 来保存未编码/编码的值?例如:

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;


@XmlRootElement( name = "movie" )
public class Movie
{
@XmlElement
String name;

@XmlElement
String genre;

关于java - JAXB 在解码后创建空的 TreeSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6657254/

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