let classNameHolder = ["avatar","orangeAvatar","purpleAvatar"];
<Card>
<CardHeader
avatar={
<Avatar id="av" aria-label="Recipe"
className={classNameHolder[Math.floor(Math.random() * 3)]}>{this.props.userName.charAt(0).toLocaleUpperCase()}
</Avatar>}
title={this.props.userName} disableTypography={true}/>
<CardActionArea disabled={this.state.images.length == 1 ? true : false}>
<CardMedia
id={this.props.ownerId}
className={classes.media}
image={this.state.images[this.state.imageIndex]}
onClick={this.handleOnClick}
/>
</CardActionArea>
</Card>
Делает FooClass
имейте XmlRootElement
аннотация? В противном случае попытка:
Source source = new StreamSource(inputStream);
JAXBElement<FooClass> root = unmarshaller.unmarshal(source, FooClass.class);
FooClass foo = root.getValue();
Это основано на Неофициальном Руководстве JAXB.
Вы - абсолютно верный FooClass, корневой элемент входного источника xml, Вы передали его? НеМаршалл возвратит объект корневого элемента, созданного xjc.
Я посмотрел бы на XML-файл и удостоверился бы, что это примерно, что Вы ожидаете видеть.
Я также временно изменил бы код на:
Object o = unmarshaller.unmarshal(inputStream);
System.out.println(o.getClass());
Если первый перестал работать затем, бросок класса происходит в методе немаршала, если он успешно выполняется затем, Вы видите фактический класс, который Вы возвращаете и затем выясняете, почему это не то, чем Вы ожидаете, что это будет.
Для более подробного объяснения прочитайте эту статью . Оказывается, ваш XSD должен быть правильно настроен, то есть должен существовать некоторый корневой элемент, охватывающий все остальные элементы.
XJC пытается поместить аннотацию
@XmlRootElement
в класс, который мы генерируем из сложный тип. Точное условие несколько уродливо, но основная идея состоит в том, что если мы можем статически гарантировать, что сложный тип не будет использоваться несколькими разными именами тегов, мы поместим@XmlRootElement
.