【发布时间】:2011-04-01 09:43:26
【问题描述】:
我们有一个从小程序内部使用 JAXB 的 Web 应用程序。一切正常,除了第一次创建 JAXBContext 时,我们在小程序控制台中看到以下记录:
Creating JAXBContext...
network: Connecting https://myserver.com/MyApp/CC.ccc with proxy=DIRECT
network: Connecting https://myserver.com/MyApp/CC.ccc with cookie "__utma=69126149.1559268128.1262793475.1265211768.1271711769.3; JSESSIONID=723072c1c4bbc2598e402b3f24a5d12f3324"
network: Cache entry not found [url: https://myserver.com/MyApp/com/comm/servlet/generated/package-info.class, version: null]
network: Connecting https://myserver.com/MyApp/com/comm/servlet/generated/package-info.class with proxy=DIRECT
network: Connecting http://myserver.com:443/ with proxy=DIRECT
network: Connecting https://myserver.com/MyApp/com/comm/servlet/generated/package-info.class with cookie "__utma=69126149.1559268128.1262793475.1265211768.1271711769.3; JSESSIONID=723072c1c4bbc2598e402b3f24a5d12f3324"
这总共发生了 20 次,大大降低了我们的应用程序的速度。
我正在使用“xjc”ant 任务 (com.sun.tools.xjc.XJCTask) 将我们的模式编译为 com/comm/servlet/generated/ 包中的 Java。代码生成良好,但没有 package-info.java。如果我手动创建此文件并编译和打包代码,则 JAR 文件中缺少 package-info.class。
这是我的 XJC 任务:
<target name="generateJAXBSource">
<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
<classpath>
<fileset dir="lib/jaxb" includes="*.jar" />
</classpath>
</taskdef>
<xjc schema="resources/requests/111.xsd"
destdir="src"
package="com.comm.servlet.generated"/>
</target>
我的 XSD 如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xml="http://www.w3.org/XML/1998/namespace">
<xs:import namespace="http://www.w3.org/XML/1998/namespace" />
<xs:element name="InfoResponse">
<xs:complexType>
<xs:sequence>
<xs:element ref="WorkQueueItem" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
我整天都在谷歌上搜索,但似乎无法弄清楚如何解决这个问题。
我尝试了建议的解决方法 here 以确保 package-info.java 被编译:
...但没有运气。
我可以指示 JAXB 不要查找 package-info.class 吗?
如何确保我手动创建的 package-info.java 最终出现在 JAR 文件中?
谢谢。
【问题讨论】: