XJC 在使用绑定声明时生成 Java 类 缺少导入语句
XJC Generated Java Classes Missing Import Statement When Using Binding Declaration
我正在尝试使用 XJC 从 XML 架构和绑定文件生成 Java classes。绑定文件旨在生成 InetAddress 类型的成员,而不是生成的 class.
中的 String
我有以下内容:
config.xsd
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="config">
<xsd:complexType>
<xsd:all>
<xsd:element name="ip" type="IPv4Address" />
</xsd:all>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="IPv4Address">
<xsd:annotation>
<xsd:documentation>
IPv4 address in the dotted-decimal notation.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:pattern value="((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])"/>
</xsd:restriction>
</xsd:simpleType>
configBindings.xml
<?xml version="1.0"?>
<jxb:bindings version="2.0"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc">
<jxb:bindings schemaLocation="config.xsd" node="/xsd:schema" >
<jxb:globalBindings>
<jxb:javaType name="InetAddress" xmlType="IPv4Address" parseMethod="InetAddress.getByName" printMethod="getHostAddress" />
</jxb:globalBindings>
</jxb:bindings>
然后,我使用 xjc -b configBindings.xml config.xsd
运行 XJC 在目录 "generated" 中生成 java 代码。
但是,虽然成员 ip
的类型已正确绑定到 InetAddress
,但文件 Config.java 缺少 java.net.InetAddress 的导入语句。因此,当我尝试编译 Config.java 或适配器 Adapter1.java 时,我遇到了几个此类错误:
$ javac generated/Adapter1.java
generated/Adapter1.java:14: error: cannot find symbol
extends XmlAdapter<String, InetAddress>
^
symbol: class InetAddress
我是否需要在 运行ning XJC 之后手动插入所需的导入语句?有没有办法让 XJC 自动为我做这件事,即使我以某种方式在绑定文件中指定所需的包?
注意:我实际上想使用我自己的适配器 class 来执行此操作,以便我可以正确处理 InetAddress 异常,但这个示例使问题更容易提出,即使生成的代码因为没有处理UnknownHostException,手动添加import语句后不会编译。
只需使用完全限定的 class 名称。你不能指望 XJC 猜测 你的意思是 java.net.InetAddress
.
我正在尝试使用 XJC 从 XML 架构和绑定文件生成 Java classes。绑定文件旨在生成 InetAddress 类型的成员,而不是生成的 class.
中的 String我有以下内容:
config.xsd
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="config">
<xsd:complexType>
<xsd:all>
<xsd:element name="ip" type="IPv4Address" />
</xsd:all>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="IPv4Address">
<xsd:annotation>
<xsd:documentation>
IPv4 address in the dotted-decimal notation.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:pattern value="((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])"/>
</xsd:restriction>
</xsd:simpleType>
configBindings.xml
<?xml version="1.0"?>
<jxb:bindings version="2.0"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc">
<jxb:bindings schemaLocation="config.xsd" node="/xsd:schema" >
<jxb:globalBindings>
<jxb:javaType name="InetAddress" xmlType="IPv4Address" parseMethod="InetAddress.getByName" printMethod="getHostAddress" />
</jxb:globalBindings>
</jxb:bindings>
然后,我使用 xjc -b configBindings.xml config.xsd
运行 XJC 在目录 "generated" 中生成 java 代码。
但是,虽然成员 ip
的类型已正确绑定到 InetAddress
,但文件 Config.java 缺少 java.net.InetAddress 的导入语句。因此,当我尝试编译 Config.java 或适配器 Adapter1.java 时,我遇到了几个此类错误:
$ javac generated/Adapter1.java
generated/Adapter1.java:14: error: cannot find symbol
extends XmlAdapter<String, InetAddress>
^
symbol: class InetAddress
我是否需要在 运行ning XJC 之后手动插入所需的导入语句?有没有办法让 XJC 自动为我做这件事,即使我以某种方式在绑定文件中指定所需的包?
注意:我实际上想使用我自己的适配器 class 来执行此操作,以便我可以正确处理 InetAddress 异常,但这个示例使问题更容易提出,即使生成的代码因为没有处理UnknownHostException,手动添加import语句后不会编译。
只需使用完全限定的 class 名称。你不能指望 XJC 猜测 你的意思是 java.net.InetAddress
.