Исключение cvc-elt.1: не удается найти объявление элемента 'AsifXml' при попытке демонтажа с использованием JAXB - PullRequest
5 голосов
/ 15 декабря 2010

Я продолжаю получать следующую ошибку при попытке отмены вызова XML-документа с использованием JAXB.Ошибка выглядит следующим образом:

cvc-elt.1: не удается найти объявление элемента 'AsifXml'

Код для отмены марширования следующий:

    JAXBContext jc = JAXBContext.newInstance("asif_objects");
    Unmarshaller u = jc.createUnmarshaller();
    SchemaFactory sf = SchemaFactory.newInstance(
            javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
    Schema schema = sf.newSchema(new File("ASIF_Schema1.1.6.xsd"));
    u.setSchema(schema);

    AsifXml doc 
        = (AsifXml)u.unmarshal(new FileInputStream("asif_small.xml"));

Я считаю, что соответствующая часть файлов xsd выглядит следующим образом (пропущено открытие и закрытие тегов, поскольку я не уверен, как их форматировать на веб-сайте:

?xml version="1.0" encoding="UTF-8"?
xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:asif="http://www.website.com/ASIF" 
targetNamespace="http://www.website.com/ASIF" elementFormDefault="qualified"
attributeFormDefault="unqualified" version="1.1.6"

xs:element name="AsifXml"
    xs:complexType

И во что я верюбыть соответствующим XML здесь:

AsifXml xmlns:AsifXml="http://www.website.com/ASIF"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1.4" 
content="study"

До сих пор я пробовал поискать в Google эту же ошибку, но, похоже, большинство ответов связано с ошибками в веб-службах, которые я не использую.Я также подумал, что, возможно, у меня возникли проблемы с проверкой, потому что я нахожусь за прокси-сервером, и он не смог достичь URL, указанного в документах схемы, но при дальнейшем исследовании у меня сложилось впечатление, что эти URL на самом деле не должны существовать дляпроверьте документ. И я попытался в другой сети, которая не находится за прокси-сервером, и получил ту же ошибку.

Любая помощь с этой проблемой очень ценится.

1 Ответ

4 голосов
/ 15 декабря 2010

Образец XML-файла мне кажется фальшивым. На первый взгляд выглядит хорошо, но не имеет смысла:

<AsifXml xmlns:AsifXml="http://www.website.com/ASIF">

Здесь объявляется тег с именем AsifXml и объявляется пространство имен XML с префиксом, также называемым AsifXml. Однако эти два не имеют ничего общего друг с другом. Сам элемент остается без какого-либо пространства имен, что нарушает схему.

Попробуйте вместо этого следующий пример, он должен работать:

<AsifXml xmlns="http://www.website.com/ASIF" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         version="1.1.4" 
         content="study">

В этом примере говорится, что элемент AsifXml имеет пространство имен http://www.website.com/ASIF, чего и ожидает схема.

Этот образец может быть эквивалентно закодирован как:

<AsifXml:AsifXml xmlns:AsifXml="http://www.website.com/ASIF" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         version="1.1.4" 
         content="study">

Это то же самое, но эта версия запутанная и многословная.

...