当前位置: 首页 > 知识库问答 >
问题:

jaxb问题:nameXmlTransform typeName前缀不起作用

王磊
2023-03-14

我希望将几个模式转换成Java代码。图式都是相似的;例如,每一个都有一个TXLife根对象。如果每个模式生成具有唯一类名的代码,那么管理代码将会更容易。我可以使用“package”绑定将每个模式的代码放入其自己的包中,但是当我试图使用“prefix”绑定来更改类名时,它会忽略它。

下面是我的schema_bindings.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" jaxb:version="2.0">
   <jaxb:bindings schemaLocation="schemas/HI_Request.xsd" node="/xsd:schema">
      <jaxb:schemaBindings>
         <jaxb:package name="com.mycompany.hi"/>
         <jaxb:nameXmlTransform>
            <jaxb:typeName prefix="Hi_"/>
         </jaxb:nameXmlTransform>
      </jaxb:schemaBindings>
   </jaxb:bindings>
</jaxb:bindings> 

当我运行得到的xjc命令时(我必须修改xjc.bat文件中的类路径以使其工作):

parsing a schema...
compiling a schema...
com\mycompany\hi\Holding.java
com\mycompany\hi\InquiryLevel.java
com\mycompany\hi\KeyedValue.java
com\mycompany\hi\OLifE.java
com\mycompany\hi\ObjectFactory.java
com\mycompany\hi\Policy.java
com\mycompany\hi\TXLife.java
com\mycompany\hi\TXLifeRequest.java
com\mycompany\hi\TransMode.java
com\mycompany\hi\TransSubType.java
com\mycompany\hi\TransType.java

我可以处理这些结果,但这意味着处理来自一个模式的输入并向另一个模式生成输出的代码必须使用完全限定的类名来引用对象,这很尴尬。

共有1个答案

应子真
2023-03-14

对应于从命名的复杂类型生成的类。您可以通过添加 来影响从全局元素生成的类来执行以下操作:

<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" jaxb:version="2.0">
   <jaxb:bindings schemaLocation="schema.xsd" node="/xsd:schema">
      <jaxb:schemaBindings>
         <jaxb:package name="com.mycompany.hi"/>
         <jaxb:nameXmlTransform>
            <jaxb:typeName prefix="Hi_"/>
            <jaxb:elementName prefix="Hi_"/>
         </jaxb:nameXmlTransform>
      </jaxb:schemaBindings>
   </jaxb:bindings>
</jaxb:bindings> 

下面是一个完整的例子。

schema.xsd

<?xml version="1.0" encoding="UTF-8"?>
<schema 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/schema" 
    xmlns:tns="http://www.example.org/schema" 
    elementFormDefault="qualified">

    <element name="GlobalElement">
        <complexType>
            <sequence>
                <element name="foo" type="string"/>
            </sequence>
        </complexType>
    </element>

    <complexType name="NamedComplexType">
        <sequence>
            <element name="bar" type="string" />
        </sequence>
    </complexType>

</schema>
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" jaxb:version="2.0">
   <jaxb:bindings schemaLocation="schema.xsd" node="/xsd:schema">
      <jaxb:schemaBindings>
         <jaxb:package name="com.mycompany.hi"/>
         <jaxb:nameXmlTransform>
            <jaxb:typeName prefix="Type_"/>
            <jaxb:elementName prefix="Element_"/>
         </jaxb:nameXmlTransform>
      </jaxb:schemaBindings>
   </jaxb:bindings>
</jaxb:bindings> 
xjc -b binding.xml schema.xsd
parsing a schema...
compiling a schema...
com/mycompany/hi/Element_GlobalElement.java
com/mycompany/hi/ObjectFactory.java
com/mycompany/hi/Type_NamedComplexType.java
com/mycompany/hi/package-info.java
 类似资料:
  • 问题内容: 除了包级别注释外,还有其他方法可以使用注释来控制自定义名称空间前缀。 可以在元素级别完成吗?也可能有一个带有多个前缀的名称空间吗? 问题答案: 您实际上想做什么?为什么名称空间前缀对您很重要? 对于命名空间前缀,没有标准的元素级注释。 我知道的控制名称空间前缀的选项是: 你已经提到过。 提供习俗。 XML的低级处理(例如,在StAX,SAX或DOM级别)。 我也可以想象: / 通常使用

  • 问题内容: 我正在尝试使用jaxb生成xml。我创建了xsd并生成了Java类。但是,当我生成xml时,我会将ns2前缀添加到根标签中,这是我不想要的。 例如:我想成为根标签 ,但成为 在生成的java类中,我给了注解 可以帮个忙吗 问题答案: 如果这是您的课程: 然后就可以知道根元素上有一个前缀,因为您已指定“根”元素是名称空间限定的,而“ id”元素则不是。 如果将package-info类添

  • 我有这个xml文件: 我有以下java代码: 在控制台输出中,我看到 我做错了什么? java版本“1.7.0_45”

  • 在阅读了Oracle论坛,Stackoverflow上有关此内容的所有帖子后,java.net 我终于在这里发布。我正在使用 JAXB 创建 XML 文件,但问题是它在我的元素之前添加了著名的 ns2 前缀,我已经尝试了所有没有人为我工作的解决方案。java 版本给出“1.6.0_37” 解决方案 1:使用包信息.java 我在包含@Xml*注释类的包中创建了文件,内容如下: 解决方案2:Name

  • 我对Lucene的不同查询对象进行了一些试验,并试图理解为什么在使用WhitespaceAnaylzer进行索引时,前缀查询与任何文档都不匹配。考虑以下测试代码: 如果我用StandardAnalyzer替换WhitespaceAnaylzer,测试就会通过。我使用Luke检查索引内容,但在索引过程中Lucene存储值的方式上找不到任何差异。谁能澄清一下出了什么问题吗?

  • 问题内容: 我遵循此经常引用的博客文章中有关使用xsi:type的说明: http://blog.bdoughan.com/2010/11/jaxb-and-inheritance-using- xsitype.html 基本上我有这个: 而这个测试: 我得到这个结果: 我已经尝试了JAXB的默认实现jaxb- impl-2.1.2,并基于此bug尝试了jaxb- impl-2.2.6-b38.j