Доброе утро,
Я работал над проектом, где я должен:
Я уверен, что это не помогает, но я новичок в мире Java/Spring/WebLogic.
Я смог перейти с JRockit 1.6 на Java 7, но когда дело доходит до части WebLogic, у меня возникли проблемы с запуском приложения.
Каждый раз, когда я это делаю, я получаю следующую ошибку
org.jibx.runtime.JiBXException: Missing required attribute "a" (line 1, col 71)
at org.jibx.runtime.impl.UnmarshallingContext.attributeText(UnmarshallingContext.java:975)
at com.mydomain.JiBX_rule_def_bindingMungeAdapter.JiBX_rule_def_binding_unmarshalAttr_1_0()
at com.mydomain.JiBX_rule_def_bindingMutableRuleDefinition_access.unmarshal()
at org.jibx.runtime.impl.UnmarshallingContext.unmarshalElement(UnmarshallingContext.java:2757)
at org.jibx.runtime.impl.UnmarshallingContext.unmarshalDocument(UnmarshallingContext.java:2900)
и пытались отладить его какое-то время. Что действительно странно, когда я вынимаю код из среды Spring/WebLogic и выполняю его, он отлично работает (т.е. Отключает данные).
Когда это было в среде WebLogic 10.3.5 с JRockit 1.6 и JiBX 1.2.1, у меня были нулевые проблемы.
Вот что я пробовал
попробовал, включая файл weblogic.xml (ранее не было) и попытался использовать
<preferred-web-inf>true</preferred-web-inf>
но не повезло
Вот еще информация об окружающей среде, в которой я работаю
нет xsd файла только файл привязки.xml
<binding>
<mapping name="rule"
class="com.mydomain.MutableRuleDefinition">
<value name="a" field="a" style="attribute" />
<value name="b" field="b" style="attribute" />
<collection field="ruleElements">
<structure name="ruleElement"
type="com.mydomain.MutableRuleElement">
<value name="c" field="c" style="attribute" />
<value name="d" field="d" style="attribute" />
<collection field="values" item-type="java.lang.String"
usage="optional">
<value name="value" />
</collection>
</structure>
</collection>
</mapping>
</binding>
Вот код unmarshalling:
private MutableRuleDefinition unmarshalXMLRuleDef(String _xmlRuleDef) {
MutableRuleDefinition mruleDef = null;
try {
IBindingFactory bfact = BindingDirectory
.getFactory(MutableRuleDefinition.class);
IUnmarshallingContext uctx = bfact.createUnmarshallingContext();
mruleDef = (MutableRuleDefinition) uctx.unmarshalDocument(
new ByteArrayInputStream(_xmlRuleDef.getBytes()), null);
} catch (JiBXException e) {
logger.error("Could not un-marshalling the XML rule definition:["
+ _xmlRuleDef + "]", e);
}
По-видимому, это было проблемой в JiBX 1.2.1, но было исправлено в 1.2.2:
https://www.mail-archive.com/[email protected]/msg04200.html
Любая помощь оценивается. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация...
Обновление # 1
я пытался
<value name="a" field="a" style="attribute" usage=optional />
однако все флаги атрибутов и unmarshalling будут работать, однако эти поля не являются необязательными, поэтому я не могу использовать это как исправление.
Обновление # 2
fwiw, вот пример, который должен был стать немаршаллированным
<rule a="dataForA" b="dataForB">
<ruleElement c="dataForC1" d="dataForD1" />
<ruleElement c="dataForC2" d="dataForD2" />
<ruleElement c="dataForC3" d="dataForD3" />
<ruleElement c="dataForC4" d="dataForD3" />
</rule>
R Hanna,
Я бы посоветовал посмотреть на зависимости JiBX и убедиться, что все Jars являются той же версией, что и JiBX. Мы используем некоторые библиотеки eclipse, которые часто конфликтуют с банками веб-серверов.
Кроме того, помните, что JiBX является открытым исходным кодом. Вы можете пройти через код и посмотреть, что вызывает JiBX.
Еще кое-что. Я не вижу вашего определения схемы, но странно, что ошибка, похоже, говорит о том, что вам не хватает атрибута. Вы уверены, что атрибут 'source' не требуется.
Удачи!
Дон Корли JiBX contributor
R Hanna,
Я решил, что это разрешилось для меня после использования версии 1.2.5 jibx, однако я убедился, что все связанные банки также обновлены до 1.2.5 и убедитесь, что в моей войне нет файлов устаревшего класса, которые были созданы предыдущими банками, которые сделали трюк для меня надеюсь, что это поможет вам.
public String attributeText(String ns, String name) throws JiBXException
Во время отладки я заметил, что рабочая версия использует StAX для анализа XML, но не работал с XPP3, но JiBX использует XPP3, верно?