Несогласованное исключение ClassCastException для метода анализа XmlBeans.FactoryJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Несогласованное исключение ClassCastException для метода анализа XmlBeans.Factory

Сообщение Anonymous »

Я знаю, что это очень далекая перспектива, но я пытаюсь понять это уже около двух недель, поэтому любая идея, указывающая в правильном направлении, может быть бесценной. >

Итак, у меня есть очень старое приложение, использующее XmlBeans. Моя задача — перейти с Tomcat 7.0.67 на Tomcat 8.5.11, введя Spring Sessions и Spring Security вместо аутентификации на основе Realm. До миграции все работало нормально как локально (MacOS, Oracle JDK 8), так и на Heroku (Ubuntu, OpenJDK 8), но после миграции все работает в моей локальной среде, но иногда и на Heroku, когда приложение пытается проанализировать строку, соответствующую XmlBean, возникает исключение ClassCastException:

Код: Выделить всё

java.lang.ClassCastException: foo.bar.2.impl.PreferencesDocumentImpl cannot be cast to foo.bar.1.PreferencesDocument
at foo.bar.1.PreferencesDocument$Factory.parse(Unknown Source)
У меня есть два автоматически созданных XmlBeans класса, которые были созданы на основе двух xsd-схем без какого-либо заданного пространства имен. Классы имеют одинаковое имя, но расположены в разных пакетах (метод анализа, в котором возникает исключение, находится во внутреннем классе Factory, другие методы опущены):

Код: Выделить всё

/*
* An XML document type.
* Localname: Preferences
* Namespace:
* Java type: foo.bar.1.PreferencesDocument
*
* Automatically generated - do not modify.
*/
package foo.bar.1;

public interface PreferencesDocument extends org.apache.xmlbeans.XmlObject {
public static final org.apache.xmlbeans.SchemaType type = (org.apache.xmlbeans.SchemaType)
org.apache.xmlbeans.XmlBeans.typeSystemForClassLoader(PreferencesDocument.class.getClassLoader(), "schemaorg_apache_xmlbeans.system.s2D5798E4F4AFDA8394735C8512CDCBC7").resolveHandle("preferencesa8bfdoctype");

public static final class Factory {
public static foo.bar.1.PreferencesDocument parse(java.lang.String xmlAsString) throws org.apache.xmlbeans.XmlException {
return (foo.bar.PreferencesDocument) org.apache.xmlbeans.XmlBeans.getContextTypeLoader().parse( xmlAsString, type, null );
}
}
}

/*
* An XML document type.
* Localname: Preferences
* Namespace:
* Java type: foo.bar.1.PreferencesDocument
*
* Automatically generated - do not modify.
*/
package foo.bar.1.impl;

public class PreferencesDocumentImpl extends org.apache.xmlbeans.impl.values.XmlComplexContentImpl implements foo.bar.1.PreferencesDocument {
public PreferencesDocumentImpl(org.apache.xmlbeans.SchemaType sType) {
super(sType);
}

private static final javax.xml.namespace.QName PREFERENCES$0 = new javax.xml.namespace.QName("", "Preferences");
}

/*
* An XML document type.
* Localname: Preferences
* Namespace:
* Java type: foo.bar.2.PreferencesDocument
*
* Automatically generated - do not modify.
*/
package foo.bar.2;

public interface PreferencesDocument extends org.apache.xmlbeans.XmlObject {
public static final org.apache.xmlbeans.SchemaType type = (org.apache.xmlbeans.SchemaType)
org.apache.xmlbeans.XmlBeans.typeSystemForClassLoader(PreferencesDocument.class.getClassLoader(), "schemaorg_apache_xmlbeans.system.sC8953008EC716AA258D3951B84AB1CB7").resolveHandle("preferencesa8bfdoctype");

public static final class Factory {
public static foo.bar.2.PreferencesDocument parse(java.lang.String xmlAsString) throws org.apache.xmlbeans.XmlException {
return (foo.bar.2.PreferencesDocument) org.apache.xmlbeans.XmlBeans.getContextTypeLoader().parse( xmlAsString, type, null ); }

}
}

/*
* An XML document type.
* Localname: Preferences
* Namespace:
* Java type: foo.bar.2.PreferencesDocument
*
* Automatically generated - do not modify.
*/
package foo.bar.2.impl;

public class PreferencesDocumentImpl extends org.apache.xmlbeans.impl.values.XmlComplexContentImpl implements foo.bar.2.PreferencesDocument {

public PreferencesDocumentImpl(org.apache.xmlbeans.SchemaType sType) {
super(sType);
}

private static final javax.xml.namespace.QName PREFERENCES$0 =
new javax.xml.namespace.QName("", "Preferences");
}
}
Иногда, когда приложение, развернутое в Heroku, перезапускается, проблема исчезает, но после повторного перезапуска она возвращается снова.

Согласно этому, основной причиной является отсутствие пространств имен, что приводит к коллизии. Но из-за наших требований я не могу добавлять или изменять пространство имен xsds. Итак, есть ли у вас идеи, почему он работает локально с Tomcat 7, локально с Tomcat 8 и на Heroku с Tomcat 7, но не работает на Heroku с Tomcat 8?

Заранее спасибо.

Подробнее здесь: https://stackoverflow.com/questions/433 ... rse-method
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»