Ошибка XSD SchemaFactory - Java 6 - PullRequest
       28

Ошибка XSD SchemaFactory - Java 6

2 голосов
/ 20 декабря 2011

В приведенном ниже коде я пытаюсь проверить XML. Все работает найти, когда я запускаю его из затмения. Когда я внедряю его в weblogic, код завершается с ошибкой: «Исключение SAX во время processingsrc-resol: Не удается разрешить имя XX: sometag для (n) компонента« определение типа »."

SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
System.out.println("schemaFactory -> " + schemaFactory.getClass());
Schema schema = schemaFactory.newSchema(resourceHandler.getXSDStreams());
StreamSource xmlContent = new StreamSource(new StringReader(requestXML));
Validator validator = schema.newValidator();
validator.validate(xmlContent);

Это вывод, сгенерированный в eclipse для фабрики схем: schemaFactory -> класс com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory

В Weblogic один и тот же код с теми же файлами JAR выдает ошибку, упомянутую выше. SchemaFactory точно такой же.

Конфиг - 2

Я попытался установить свойство System для загрузки файлов xerces и добавил xerces в classpath

String schemaFactoryProperty = "javax.xml.validation.SchemaFactory:" + XMLConstants.W3C_XML_SCHEMA_NS_URI;
System.setProperty(schemaFactoryProperty,"org.apache.xerces.jaxp.validation.XMLSchemaFactory");  

Тем не менее выходные данные для фабрики схем остаются прежними: "schemaFactory -> class com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory", но на этот раз ошибка изменилась на:

java.lang.IllegalArgumentException: Source parameter of type 'javax.xml.transform.stream.StreamSource' is not recognized this SchemaFactory.
    at com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory.newSchema(XMLSchemaFactory.java:203)
    at com.bt.asi.task.AffectedServiceTask.execute(AffectedServiceTask.java:47)
    at com.bt.asi.service.ASIJMSService.onMessage(ASIJMSService.java:30)
    at... 

Я нахожусь на Java 6 и WLS 10.3.0 (Java 6) и использую Spring Framework.

1 Ответ

1 голос
/ 21 декабря 2011

Работает (через 4 часа !!!).

На локальном, почему это работает: Схемы были загружены из папки, поэтому импорт в XSD, как и раньше, работал.

На сервере я поместил файл jar, поэтому sourceLocation = "SomeFile.xsd" никогда не приводил к файлу, поскольку фактический путь был URI.

Что это исправило: 1) Я изменил последовательность загрузки схем (без импорта -> все импорты), чтобы убедиться, что когда текущий xsd компилирует все зависимости, он уже находится в schemaFactory (это было возможно, поскольку у меня не было импортированных ссылок поэтому у меня был четкий порядок того, какой файл загружать первым и т. д.)

2) То, что я мог бы сделать, - объединить все XSD в один файл.

3) ИЛИ я мог бы сохранить XSD в web-inf / и затем искать их вместо файла JAR. Тогда import sourceLocation = "" нашел бы этот файл.

Надеюсь, это кому-нибудь поможет !!!

Приветствия. Вивек

...