迁移到WebLogic 12后获取“缺少必需属性”JiBX错误

时间:2015-01-21 15:36:50

标签: java xml spring weblogic12c jibx

早上好,

我一直致力于一个我应该做的项目:

  1. 将应用程序从JRockit 1.6升级到Java 7
  2. 升级应用程序以在WebLogic 10.3.5环境中运行以在WebLogic 12环境中运行
  3. 我确信这不会有帮助,但我是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环境中取出代码并执行它时,它工作正常(即,解组数据)。

    当它在使用JRockit 1.6和JiBX 1.2.1 jar的WebLogic 10.3.5环境中时,我没有问题。

    这是我尝试过的事情

    • 将JiBX罐子从1.2.1升级到1.2.5
    • 将xpp3 jars升级为1.1.3.4.O
    • 将Spring jar从2.5.5升级到3.2.11
    • 尝试包含一个weblogic.xml文件(之前没有一个)并尝试使用

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

    但没有运气

    • 试图包含一个weblogic-application.xml文件和一个APP-INF文件夹(之前没有一个)并尝试使用JiBX作为我的解密类来进行解组

    以下是有关我在

    工作的环境的更多信息
    • 非Maven环境(必须手动升级.jars)
    • 使用Java 1.7.0.45和.71
    • WebLogic 1.2.1.2
    • Spring 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>
      

    以下是解组代码:

    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/jibx-users@lists.sourceforge.net/msg04200.html

    任何帮助表示赞赏。如果您需要更多信息,请告诉我......

    更新#1

    我试过了

    <value name="a" field="a" style="attribute" usage=optional />
    

    关于所有属性标记和解组将起作用,但是,这些字段不是可选的,所以我不能将其用作修复。

    更新#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>
    

2 个答案:

答案 0 :(得分:0)

R汉娜,

我建议查看JiBX依赖项并确保所有Jars与JiBX使用的版本完全相同。我们使用一些经常与Web服务器jar冲突的eclipse库。

另外,请记住JiBX是开源的。您可能希望单步执行代码并查看导致JiBX失败的原因。

还有一件事。我无法看到您的架构定义,但奇怪的是,错误似乎表明您错过了一个属性。你确定的来源&#39;属性不是必需的。

祝你好运!

唐科利 JiBX撰稿人

答案 1 :(得分:-1)

R汉娜,

我在使用1.2.5版本的jibx之后为我解决了这个问题但是我确保所有相关的jar也更新到1.2.5并且确保我的战争中没有过时的类文件由前一个创建为我做伎俩的罐子希望它可以帮助你。