2017-01-06 9 views
2

У меня возникли проблемы с отменой моих данных. Я получил следующее сообщение об ошибке:Нет URI javax.xml.bind.UnmarshalException: неожиданный элемент (uri: "", local: "SearchAndList"). Ожидаемые элементы (нет)

ERROR FsceClient - Error in getDataInMatches : unexpected element (uri:"", local:"SearchAndList"). Expected elements are (none) requested params:+COUNTRY=US+YR=2016+DIV=Ford+WB=122.0 javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"SearchAndList"). Expected elements are (none) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:726)

Это мой XML-файл:

<SearchAndList> 
    <fvd> 
     +COUNTRY=US+YR=2016+DIV=Ford+WB=122.0 
    </fvd> 
    <sol> 
    <rsi> 
     <sType>Ss</sType> 
     <mHave>true</mHave> 
     <toAr>0</toAr> 
     <toAr>0</toAr> 
     <toAr>22</toAr> 
    </rsi> 
    <rsi> 
     <sType>ssa</sType> 
     <mHave>true</mHave> 
     <toAr>77</toAr> 
    </rsi> 
    </sol> 
    <sol> 
     <rsi> 
      <sType>sve</sType> 
      <mHave>false</mHave> 
      <toAr>0</toAr> 
      <toAr>21</toAr> 
     </rsi> 
    </sol> 
</SearchAndList> 
+0

Пожалуйста, измените свой вопрос и показать ваш XML-схемы в дополнение к XML. Это также помогло бы, если бы мы могли видеть код, который делает unmarshalling. – VGR

+0

Я довольно новичок в веб-сервисах. Я использую anotation: это мой код для: UnmarshallerPool searchAndListPool = null; \t \t \t JAXBContext jaxbContext_SearchAndList = JAXBContext.newInstance (SearchAndList.class); \t \t \t searchAndListPool = new UnmarshallerPool (MAX_POOL_SIZE, jaxbContext_SearchAndList); \t \t \t searchAndListPool.initialize(); \t \t \t \t \t Unmarshaller unmarshaller = null; \t \t \t InputStream in = makeCachedGETServerCall (finalURL); \t \t \t unmarshaller = поискAndListPool.getResource(); \t \t \t возвращение (SearchAndList) unmarshaller.unmarshal (in); –

+0

@XmlRootElement (name = "searchAndList") @XmlAccessorType (XmlAccessType.FIELD) public class SearchAndList extends ArrayList реализует Serializable { \t частный статический конечный длинный serialVersionUID = 2447564738604L; \t @XmlElement \t частный String fvd; \t public SearchAndList() { \t \t super(); \t} \t \t общественного недействительными setFvd (Строка FVD) { \t \t this.fvd = ФВД; \t} \t Строка getFvd общественности() { \t \t возвращение ФВД; \t} \t @XmlElement (имя = "золь", тип = Sol.class) \t общественности Список getSol() { \t \t возвращение этого; \t} } –

ответ

0

Это возникает, когда схема XSD не содержит определение элементов и содержит только определение класса (т.е. сложных типов).

например. для этого XSD,

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:complexType name="foo"> 
    <xs:sequence> 
     <xs:element name="bar" type="xs:string"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:schema> 

Объект фабрики создан как это:

@XmlRegistry 
public class ObjectFactory { 
    public ObjectFactory() { 
    } 
    public Foo createFoo() { 
     return new Foo(); 
    } 
} 

НО ДЛЯ ЭТОГО XSD:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="foo" type="foo" nillable="true"/> 
    <xs:complexType name="foo"> 
    <xs:sequence> 
     <xs:element name="bar" type="xs:string"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:schema> 

ObjectFactory класс, созданный JAXB является:

@XmlRegistry 
public class ObjectFactory { 
    private final static QName _Foo_QNAME = new QName("", "foo"); 
    public ObjectFactory() { 
    } 
    public Foo createFoo() { 
     return new Foo(); 
    } 
    @XmlElementDecl(namespace = "", name = "foo") 
    public JAXBElement<Foo> createFoo(Foo value) { 
     return new JAXBElement<Foo>(_Foo_QNAME, Foo.class, null, value); 
    } 
} 

Вы можете видеть, что JAXB Также добавлен способ создания оболочки элемента. Со вторым XSD, unmarshaller знает, что делать, когда он встречает тег с именем «foo». Поэтому, если у вас есть XSD, добавьте определения «element», а также сложные типы.

----- EDIT ---- Пример кода unmarshaller:

JAXBContext jaxbContext = JAXBContext.newInstance(ObjectFactory.class); 
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
Object result = ((JAXBElement<Object>) jaxbUnmarshaller.unmarshal(stream)).getValue(); 

 Смежные вопросы

  • Нет связанных вопросов^_^