通过自定义解决JAXB"ObjectFactory类中的名称冲突"问题

jul*_*ien 9 java xml jaxb

上执行"XJC"命令这些XSD文件返回Two declarations cause a collision in the ObjectFactory class,因为有一个名为"规模"和"规模"的2个元素.

根据此页面,可以通过自定义xsd文件来解决此问题<factoryMethod>.

你知道怎么做吗?你有一个绑定文件的例子吗?

Ted*_*ueh 11

您可以使用绑定标记.将schemaLocation属性设置为特定xsd的位置.子标签,schemaBindings和包然后为该xsd定义新的包名称空间.下面是我刚才和xjc一起使用的绑定文件.如果它仍然有效,那很好.如果不是,例子=).

<?xml version="1.0" ?>
<bindings xmlns="http://java.sun.com/xml/ns/jaxb" version="2.1"
      xmlns:kml="http://www.opengis.net/kml/2.2"
      xmlns:atom="http://www.w3.org/2005/Atom">

  <bindings schemaLocation="ogckml22.xsd">
    <schemaBindings>
      <package name="net.opengis.kml"/>
    </schemaBindings>
  </bindings>
  <bindings schemaLocation="kml22gx.xsd">
    <schemaBindings>
      <package name="net.opengis.kml.ex"/>
    </schemaBindings>
  </bindings>
  <bindings schemaLocation="atom-author-link.xsd">
    <schemaBindings>
      <package name="org.w3c.atom"/>
    </schemaBindings>
  </bindings>
  <bindings schemaLocation="xAL.xsd">
    <schemaBindings>
      <package name="org.oasis.xal"/>
    </schemaBindings>
  </bindings>
  <bindings scd="kml:scale">
    <class name="scaleliteral"/>
  </bindings>
  <bindings scd="kml:snippet">
    <class name="snippetliteral"/>
  </bindings>
  <bindings scd="kml:Snippet">
    <property name="snippetDeprecated"/>
  </bindings>
  <bindings scd="atom:link">
    <property name="atomLink"/>
  </bindings>
</bindings>
Run Code Online (Sandbox Code Playgroud)


Mur*_*rat 5

你试过-B-XautoNameResolution吗?它可能并不总能做到这一点,但最好在编写绑定文件之前尝试一下.

  • 它在2.1.10中称为"-XautoNameResolution" - 我遇到了同样的问题.如果你离开`-B`,它就可以正常工作 (2认同)