2013-03-04 2 views
2

Я пытаюсь создать библиотеку java-client, используя задачу enunciate v1.26.2 ant. Проблема заключается в том, что каждый раз, когда я пытаюсь сделать это, я получаю следующее предупреждение:Невозможно создать enunciate java-клиент с помощью ant task

WARNING: Unknown artifact 'java.client.library'. Artifact will not be exported. 

Я проверил, что Java-клиент излагает банка на пути к классам и излагаю даже говорю, что он нашел его на выходе.

enun: 
Loading modules from the specified classpath.... 
Discovered module docs 
Discovered module java-client 
... 

Так что я не уверен, что именно делать. Я попробовал поиск в Google, чтобы узнать, что у SO есть только несколько вопросов для прочтения, и никто, кажется, не отвечает на мой вопрос. Это мой скрипт с соответствующими строками:

<path id="enunciate.classpath"> 
    <fileset dir="${lib.enunciate.dir}"> 
     <include name="*.jar"/> 
    </fileset> 
    <fileset dir="${lib.dir}"> 
     <include name="**/*.jar" /> 
    </fileset> 
    <fileset dir="${java.home}"> 
     <include name="lib/tools.jar"/> 
    </fileset> 
</path> 

<taskdef name="enunciate" classname="org.codehaus.enunciate.main.EnunciateTask"> 
    <classpath refid="enunciate.classpath"/> 
</taskdef> 

<target name="enun" description="Run enunicate task on the rest services"> 
    <enunciate basedir="${src.web.java.dir}"> 
     <include name="**/*.java"/> 
     <classpath refid="enunciate.classpath"/> 
     <export artifactId="java.client.library" destination="${dist.client.dir}/rest/" /> 
     <export artifactId="docs" destination="${dist.docs.rest.dir}/"/> 
     <javacArgument argument="-g"/> 
    </enunciate> 
</target> 

Примечание: Экспорт документов вызывается и экспортируется корректно без проблем. Код, который включен, компилируется без проблем. Я просто не могу понять, почему скрипт ant не хочет экспортировать библиотеку java-client. Я попытался изменить имя artifactId на несколько разных значений, в том числе: java.client.library.binaries, java-client.library, enunciate-java-client и все другие вещи без конечного результата. Я попытался использовать файл конфигурации enunciate.xml, который, похоже, не помог. Вот XML я пытался использовать:

<?xml version="1.0"?> 
<enunciate label="full" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.26.xsd"> 
    <modules> 
     <java-client disabled="false" disableCompile="false" jarName="foo.jar"/> 
     <docs disabled="false" docsDir="dist/docs/rest/"/> 
    </modules> 
</enunciate> 

ответ

0

ТЛ; др:Для моего проекта я могу использовать только функцию DOCS излагают, потому что у меня нет JAXB/Джексон настроить на объекты домена этой службы Реста , Я использую что-то другое, которое просто проходит по строкам JSON, которые прописываются, не распознаются как допустимый тип возвращения/принятия конечной точки и поэтому не могут создавать клиентский API.

Итак, после исчерпывающего поиска и анализа провозглашения я понял, что сделал некоторые предположения об этом, что привело меня к плохому пути. Я собираюсь поделиться своими выводами здесь, потому что это помогает кому-то еще на этом пути.

Среди моих ошибок есть тот факт, что я впервые просмотрел веб-сайт enunciate, и он не совсем щелкнул, какие цели были провозглашены. Enunciate - это библиотека, которая пытается сделать , создавая API для отдыха намного проще. Однако работа в уже существующем API-интерфейсе может быть сложной задачей. В моем случае сервис остался настолько массивным, что внесение больших изменений было бы невозможно.

Самое большое осознание, что у меня было: enunciate, требует, чтобы у вас был какой-то тип возврата/принятия конечной точки, который может распознать. Итак, JAXB, Jackson и т. Д. Без этих процитирующих явлений, по сути, сказано: «У меня нет возможности создать клиентский API, так как я не знаю, что ваши конечные точки возвращают/принимают». Поэтому он отказывается. Я проверил это, проверив мой код по сравнению с объявлением examples, а POJO examples имеют @XmlRootElemet от JAXB на своих доменах POJO. Это позволяет службам отдыха передавать их, а JAXB обрабатывает (un /) сортировку. Затем Enunciate создает клиентский API с POJO, который может обрабатывать данные, которые конечная точка передает ему. (Могу даже быть прямыми копиями POJO, я этого не подтвердил.)

(Надеюсь, мое понимание этого процесса верное. Просьба прокомментировать, если это не так, и я сделаю соответствующие изменения.)

Я надеюсь, что это поможет кому-то еще.

+0

Я, вероятно, собираюсь в конечном итоге дать тик себе, но я буду ждать, если у кого-то есть комментарии по поводу редактирования/улучшения моего ответа. – QuestionMarcs

0

Huh. Weird. Что происходит, когда вы пытаетесь экспортировать в файл ? Например.:

<export artifactId="java.client.library" destination="${dist.client.dir}/rest/myfile.zip" /> 
+0

ВНИМАНИЕ: Неизвестный артефакт 'java.client.library'. Артефакт не будет экспортироваться. – QuestionMarcs

Смежные вопросы