Получение ошибки JiBX «Отсутствует обязательный атрибут» после перехода на WebLogic 12

1

Доброе утро,

Я работал над проектом, где я должен:

  1. обновить приложение от JRockit 1.6 до Java 7
  2. обновить приложение для запуска в среде WebLogic 10.3.5 для работы в среде WebLogic 12

Я уверен, что это не помогает, но я новичок в мире 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, у меня были нулевые проблемы.

Вот что я пробовал

  • обновленные банки JiBX от 1.2.1 до 1.2.5
  • обновленные банки xpp3 до 1.1.3.4.O
  • модернизированные весовые баночки от 2.5.5 до 3.2.11
  • попробовал, включая файл weblogic.xml (ранее не было) и попытался использовать

     <preferred-web-inf>true</preferred-web-inf>
    

но не повезло

  • попробовал, включая файл weblogic-application.xml и папку APP-INF (ранее не было), и попытался использовать JiBX как мой привилегированный класс для unmarshalling

Вот еще информация об окружающей среде, в которой я работаю

  • Non Maven Environment (пришлось вручную обновить.jars)
  • Используемые Java 1.7.0.45 и.71
  • WebLogic 1.2.1.2
  • Весна 3.2.11
  • JiBX 1.2.5
  • с использованием MyEclipse Версия: 2014 Build id: 12.0.0-20131202
  • нет 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>
Теги:
spring
weblogic12c
jibx

2 ответа

0

R Hanna,

Я бы посоветовал посмотреть на зависимости JiBX и убедиться, что все Jars являются той же версией, что и JiBX. Мы используем некоторые библиотеки eclipse, которые часто конфликтуют с банками веб-серверов.

Кроме того, помните, что JiBX является открытым исходным кодом. Вы можете пройти через код и посмотреть, что вызывает JiBX.

Еще кое-что. Я не вижу вашего определения схемы, но странно, что ошибка, похоже, говорит о том, что вам не хватает атрибута. Вы уверены, что атрибут 'source' не требуется.

Удачи!

Дон Корли JiBX contributor

  • 0
    Доброе утро Дон,
  • 0
    Спасибо за советы. Я обновил свое сообщение об ошибке, чтобы отразить файл binding.xml (т. Е. Заменил 'source' w / 'a'). Я проверил свою среду, в которой работает демаршаллинг JiBX (также в той же IDE MyEclipse), и скопировал эти .jars в мой проект, но все еще безрезультатно. Кажется, здесь происходит ошибка в Unmarshalling.java (строка 975): public String attributeText(String ns, String name) throws JiBXException Во время отладки я заметил, что рабочая версия использует StAX для анализа XML, но не работал с XPP3, но JiBX использует XPP3, верно?
Показать ещё 1 комментарий
-1

R Hanna,

Я решил, что это разрешилось для меня после использования версии 1.2.5 jibx, однако я убедился, что все связанные банки также обновлены до 1.2.5 и убедитесь, что в моей войне нет файлов устаревшего класса, которые были созданы предыдущими банками, которые сделали трюк для меня надеюсь, что это поможет вам.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню