JAXB: Получение ошибки «Не удается разрешить имя xxx в (n) компонент« определение типа ».» - PullRequest
1 голос
/ 18 июля 2011

Я пытаюсь использовать JAXB для демонтажа некоторого XML, но мне кажется, что появляется ошибка «Не удается разрешить имя xxx для (n) компонента« определение типа »».когда я нажимаю на строку, содержащую sf.newSchema (...) :

JAXBContext jc = JAXBContext.newInstance("some.package.name");

Unmarshaller unmarshaller = jc.createUnmarshaller();

SchemaFactory sf = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);

Collection<Source> sources = new ArrayList<Source>();

sources.add(new StreamSource(new File("dog.xsd")));
sources.add(new StreamSource(new File("cat.xsd")));
sources.add(new StreamSource(new File("cow.xsd")));
sources.add(new StreamSource(new File("horse.xsd")));
sources.add(new StreamSource(new File("mouse.xsd")));

Schema schema = sf.newSchema(sources.toArray(new Source[0]));  // SAXParseException thrown here
unmarshaller.setSchema(schema);

unmarshaller.unmarshal(socket.getInputStream());

Трассировка исключения выглядит так:

org.xml.sax.SAXParseException: src-resolve: Cannot resolve the name 'xxx:xxx' to a(n) 'type definition' component.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:384)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaErr(XSDHandler.java:2537)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaError(XSDHandler.java:2528)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.getGlobalDecl(XSDHandler.java:1396)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDComplexTypeTraverser.traverseSimpleContent(XSDComplexTypeTraverser.java:373)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDComplexTypeTraverser.traverseComplexTypeDecl(XSDComplexTypeTraverser.java:249)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDComplexTypeTraverser.traverseGlobal(XSDComplexTypeTraverser.java:160)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.traverseSchemas(XSDHandler.java:1255)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.parseSchema(XSDHandler.java:579)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadSchema(XMLSchemaLoader.java:552)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadGrammar(XMLSchemaLoader.java:519)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadGrammar(XMLSchemaLoader.java:485)
    at com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory.newSchema(XMLSchemaFactory.java:211)
    ...

У меня было то же самоепроблема, когда я использовал компилятор XJC для генерации источников из каждого из вышеупомянутых XSD, но мне удалось решить проблему с помощью каталога (xjc -catalog ...).

Кто-нибудь знает, что такое программный эквиваленткаталог есть?

1 Ответ

1 голос
/ 15 декабря 2015

У меня возникла похожая проблема, потому что мой XSD импортировал другой XSD.Чтобы решить эту проблему, нужно получить все импортированные XSD и включить их в построение схемы.

например

InputStream imported2Schema = ...getResourceAsStream("/com/path/to/Imported2.xsd");
Source imported2Source = new StreamSource(imported2Schema);
InputStream imported1Schema = ...getResourceAsStream("/com/path/to/Imported1.xsd");
Source imported1Source = new StreamSource(imported1Schema);
InputStream metadataSchema = ...getResourceAsStream("/com/path/to/metadata.xsd");
Source metadataSource = new StreamSource(metadataSchema);
Source[] schemaSources = new Source[] {imported2Source, imported1Source, metadataSource};
Schema schema = sf.newSchema(schemaSources);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...