JAXB в апплете - package-info.class не найден - PullRequest
1 голос
/ 20 августа 2010

У нас есть веб-приложение, которое использует JAXB из апплета. Все работает нормально, за исключением того, что при первом создании 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" (com.sun.tools.xjc.XJCTask), чтобы скомпилировать нашу схему в Java в пакете com / comm / servlet / generate / package. Код генерируется нормально, но нет package-info.java. Если я вручную создаю этот файл и компилирую и упаковываю код, package-info.class отсутствует в файле JAR.

Это моя задача 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>

Я весь день гуглял, но никак не могу понять, как это обойти.

Я попробовал предложенный обходной путь здесь , чтобы убедиться, что package-info.java скомпилирован:

... но не повезло.

Могу ли я попросить JAXB не искать package-info.class?

Как я могу убедиться, что мой созданный вручную package-info.java окажется в файле JAR?

Спасибо.

1 Ответ

0 голосов
/ 23 августа 2010

Ваша реализация JAXB ищет package-info.class для обработки любых аннотаций уровня пакета, которые могут присутствовать в вашей модели.Не существует стандартного способа запретить реализации JAXB аннотации на уровне пакета.

Добавление класса информации о пакете (в том же пакете, что и классы вашей модели) выглядит разумным решением.1004 * Вам не удается скомпилировать информацию о пакете (если да, то какую ошибку вы получаете)?Или это просто не появляется в вашем JAR (если так, как вы строите свой JAR)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...