我一直收到JAXB转换错误。
在这一点上我不确定该纠正什么。
解组:
try{
Client client = Client.create();
client.addFilter(new HTTPBasicAuthFilter(API_KEY, ""));
WebResource webResource = client.resource("https://url.entries.xml");
webResource.setProperty("", API_KEY);
ClientResponse response = webResource.accept("application/xml").get(ClientResponse.class);
if(response.getStatus() != 200){
throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
}
String output = response.getEntity(String.class);
System.out.println("\n============getFtoCResponse============");
System.out.println(output);
JAXBContext jaxbContext = JAXBContext.newInstance(Entries.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Entries itsEntries = (Entries)((JAXBElement)unmarshaller.unmarshal(new StringReader(output))).getValue();
/* Object o = unmarshaller.unmarshal(new StringReader(output));
System.out.println(o.getClass());*/
}catch(Exception e){
e.printStackTrace();
}
@XmlRootElement(name = "Entries")
@XmlAccessorType(XmlAccessType.FIELD)
public class Entry {
private String DateCreated;
private String EntryId;
private String Field1;
private String Field2;
private String Field3;
private String Field4;
@XmlRootElement(name = "Entries")
@XmlAccessorType(XmlAccessType.FIELD)
public class Entries extends Object {
@XmlElement(name="Entries")
private List<Entry> entryList = new ArrayList<Entry>();
@XmlElement(name="Entries")
public List<Entry> getEntryList() {
return entryList;
}
public void setEntryList(List<Entry> entryList) {
this.entryList = entryList;
}
}
错误消息:
不能将条目强制转换为javax.xml.bind.JaxbElement
问题更新
@XmlRootElement(name = "Entries")
@XmlAccessorType(XmlAccessType.FIELD)
public class Entries {
@XmlElement(name = "Entries")
private List<Entry> entryList = new ArrayList<Entry>();
public List<Entry> getEntryList() {
return this.entryList;
}
public void setEntryList(List<Entry> entryList) {
this.entryList = entryList;
}
}
@XmlAccessorType(XmlAccessStype.Field)公共类条目{
private String DateCreated;
private String EntryId;
private String Field1;
private String Field2;
private String Field3;
XML:
<?xml version="1.0" encoding="UTF-8"?>
<Entries>
<Entry>
<EntryId>1</EntryId>
<Field3>John</Field3>
<Field4>Doe</Field4>
<Field12>21 jump street</Field12>
<Field14></Field14>
<Field15>USA</Field15>
<Field11>USA</Field11>
</Entry>
</Entries>
据我所知,您当前的代码中有几个问题。这里列出的第二个问题是您的异常的根本原因。
您应该提供根元素的类,在您的示例中,它似乎是entries
,因此它应该是jaxbcontext.newInstance(entries.class)
预期的代码是这样的:
Entries itsEntries = (Entries)unmarshaller.unmarshal(new StringReader(output));
@XmlRootElement(name = "Entries")
@XmlAccessorType(XmlAccessType.FIELD)
public class Entries {
@XmlElement(name="Entries")
private List<Entry> entryList = new ArrayList<Entry>();
public List<Entry> getEntryList() {
return entryList;
}
第二个问题是,您有两个类entry
和entry
使用注释@XMLRootElement(name=“entries”)
与完全相同的元素名称映射,这样当JAXB找到一个名为entry
的根元素时,它就无法知道该使用哪个类,在您的情况下,entry
类是唯一的根元素,因此注释应该只在这个类上设置。类entry
的映射已经在字段entrylist
的映射上定义,因此您不需要在类上设置此批注。
@XmlAccessorType(XmlAccessType.FIELD)
public class Entry {
...
}
@XmlRootElement(name = "Entries")
@XmlAccessorType(XmlAccessType.FIELD)
public class Entries {
...
}
第三个问题与您没有正确映射类entry
中的元素entry
这实际上是您在尝试解封您的XML
内容时有一个空列表的原因有关,正确的映射是:
@XmlElement(name="Entry")
private List<Entry> entryList = new ArrayList<Entry>();
假设您引用的是java.lang.Object
,您不需要使您的类Entries
扩展java.lang.Object
,因为它是隐式的。
MainActivity.java 对不起,我的英语很差。
问题内容: 我实现了以下代码: 当单独编译时,这两行都可以正常编译,但是使用给出运行时错误 。 为什么它们编译良好,但会给出运行时错误? 问题答案: type变量可以像在case类中那样存储对类型或其子类型的对象的引用。 因此,可能会有类似以下的代码: 变量是类型的,因此它只能访问该类的API,而不能访问在类B中添加的方法,即它所指向的对象。但是有时我们希望能够访问那些方法,因此应该可以以某种方式
问题内容: 所以这工作: 但这不是: 总而言之,我得到了第一部分(拳击),但是我发现第二部分不起作用是非常不直观的。是否有特定的原因(除了String从Object继承而int不从Object继承)? 编辑: 为了完善我的问题,这也可以: 但是,以下内容却没有: 令人惊讶的是,您遇到了与String相同的问题: 在最后一行产生类强制转换异常。仍然有效: 问题答案: 我刚刚找到了我正在寻找自己的答案
问题内容: 我有。我想使用获得最大结果。这是我的代码: 这是我的: 现在我得到了。怎么了? 问题答案: 您的错误可能在以下行中: 其中query.list()返回BigInteger列表而不是Long列表。尝试将其更改为。
我不是一个设计师,但当我得到这个项目,我不能打开特别的一些屏幕,我认为他们是屏幕,我们只重用一些布局已经创建。不管怎么说谁能帮帮我吗?@override public void onBindViewHolder(@nonnull final ProductsAdapter.ViewHolder holder,final int position){String imageUrl=ProductsL