如何使用 xjc工具 生成java
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用 xjc工具 生成java相关的知识,希望对你有一定的参考价值。
对应的有Schema 文件, XML文件 以及xjs文件, 怎样才能利用 MyEclipse 生成 java类. 请高手指点一二. 在下不胜感激.
1. 找到带注释的 Java 源文件或 Java 类文件以用于生成 XML 模式文件。 确保 Java 类文件所引用的所有类均包含在类路径定义中,或者通过 -classpath/-cp 选项提供给工具。2. 使用 JAXB 模式生成器 schemagen 命令来生成 XML 模式。 模式生成器位于 app_server_root\bin\ 目录中。
[Windows]
app_server_root\bin\schemagen.bat myObj1.java myObj2.java
[Linux] [AIX] [HP-UX] [Solaris]
app_server_root/bin/schemagen.sh myObj1.java myObj2.java
其中,参数 myObj1.java 和 myObj2.java 是包含数据对象的 Java 文件的名称。
如果 myObj1.java 或 myObj2.java 引用未传递至 schemagen 命令的 Java 类,那么必须使用 -cp 选项来提供这些 Java 类的类路径位置。
3. (可选)使用在 javax.xml.bind.annotations 包中定义的 JAXB 程序注释来定制 JAXB XML 模式映射。 参考技术A 现在的人怎么这么多问题,哼,还别不高兴!
1,xjc就是一个命令行工具,有自己的专门的文档,你可以直接调用xjc命令来做.(怎么做,还扯?)
2,myeclipse没有跟xjc不搭界,也许(我不知道,也没有任何兴趣)myeclipse提供一个xjc的窗口表现,
但是那些参数还是xjc的参数,没有任何区别.
高不高不需要人说,但刚好1,2,不需要感激,不稀罕,自己好好想想吧.追问
对,我想问的就是你说的第二种方法,还请赐教.
追答括号中我说了我不知道.
既然你来兴趣了,
xjc实际上有另外一种用法,不要xml 的东西,使用xmlroot xmlelement一些标注进行自动处理.
我敢说,你的schema未必很好地适合你要处理的模型.所以还是直接用标注来做比较好.
如果非要使用schema进行转换,翻一翻jdk的文档就好了.xjc的文档基本说得过去.
JAXB:如何在XSD中指定attr类型时更改XJC生成的类名?
我是JAXB的初学者,在使用xjc生成Java类时遇到了烦人的问题。我提供了这样的XSD:
<xs:element name="item" type="itemType"/>
...
<xs:complexType name="itemType">
<xs:attribute name="id" type="xs:string" use="required">
...
</xs:complexType>
和xjc正在生成一个名为ItemType.java
的类,但我希望名称为Item.java
。也就是说,我希望生成的类就好像XSD是这样的:
<xs:element name="item">
<xs:complexType>
<xs:attribute name="id" type="xs:string" use="required">
...
</xs:complexType>
</xs:element>
在任何其他元素上都不会重复使用itemType,只是构造XSD的人喜欢这样。我想可能有一种方法可以使用自定义绑定,但我仍然没有找到如何。
有帮助吗?
谢谢,米格尔
JAXB提供了两种方法来完成此任务:
1.内联方案注释
您可以使用JAXB模式注释来控制类名。
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
jaxb:version="2.1">
<xs:complexType name="itemType">
<xs:annotation>
<xs:appinfo>
<jaxb:class name="Item"/>
</xs:appinfo>
</xs:annotation>
<xs:attribute name="id" type="xs:string" use="required"/>
</xs:complexType>
</xs:schema>
2.外部绑定文件
此自定义也可以通过和外部绑定文件完成:
<jxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<jxb:bindings schemaLocation="your-schema.xsd">
<jxb:bindings node="//xs:complexType[@name='itemType']">
<jxb:class name="Item"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
xjc命令行将是:
xjc -d out -b binding.xml your-schema.xsd
好吧,我终于找到了怎么做。我的外部绑定文件是:
<?xml version="1.0"?>
<jxb:bindings version="1.0"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jxb:extensionBindingPrefixes="xjc">
<jxb:globalBindings>
<xjc:simple/>
</jxb:globalBindings>
</jxb:bindings>
和xjc
命令必须使用-extension
选项执行。
我在这个页面找到了解决方案:
http://weblogs.java.net/blog/kohsuke/archive/2006/03/why_does_jaxb_p.html(编辑:过时的链接)
此致,米格尔
这是我用来重命名复杂类型的外部绑定文件。用cxf的wsdl2java编译。
<?xml version="1.0" encoding="UTF-8"?>
<jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<jaxws:bindings node="wsdl:definitions/wsdl:types/xsd:schema[1]">
<jxb:bindings node="//xs:complexType[@name='VatNumber_exception']">
<jxb:class name="VatNumException"/>
</jxb:bindings>
</jaxws:bindings>
</jaxws:bindings>
以上是关于如何使用 xjc工具 生成java的主要内容,如果未能解决你的问题,请参考以下文章
如何修改Java 9的ANT build.xml中的xjc块?
JAXB:如何在XSD中指定attr类型时更改XJC生成的类名?
JAXB XJC 代码生成 - Marshaller 生成的 xml 中缺少“schemaLocation”