В моем банке отсутствуют стандартные поставщики программ чтения тел сообщений - PullRequest
2 голосов
/ 07 ноября 2011

Я должен что-то пропустить уже два дня ...

У меня есть простое приложение jar, в котором используется jersey client jar. Когда я запускаю свой основной класс из Eclipse или из mvn exec, все идет хорошо.

Когда я строю свою банку, а затем запускаю ее с помощью java -jar, я получаю:

com.sun.jersey.api.client.ClientHandlerException: средство чтения тела сообщения для класса Java java.lang.String и класса Java-типа java.lang.String, а MIME-тип приложения / json не найден *

т.е.. в списке поставщиков моего клиента отсутствуют все стандартные поставщики устройств чтения типов Java.

Я объявляю в зависимости клиента pom.xml:

  • джерси-клиент
  • джерси-жильный
  • джерси-1020 * JSON *
  • джерси-сервер
  • ДЖЕКСОН-картограф-над уровнем море
  • ДЖЕКСОНА-ядро-над уровнем моря
  • джерси-многочастному

Единственный способ заставить мое приложение работать, это объявить класс StringProvider в конфигурации моего клиента ...

config.getClasses().add(StringProvider.class);

Но такое декларирование провайдера должно быть необходимо только для пользовательских бинов? Поставщики стандартных бинов доступны по умолчанию? Не так ли?

Ответы [ 2 ]

7 голосов
/ 08 ноября 2012

Я нахожу это почти через год после публикации, но оказывается, что моя проблема была в том, что я слил все в одну банку, используя тень.Добавление еще пары трансформаторов, кажется, исправило ситуацию.Мой конф плагин тени теперь выглядит так:

         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.0</version>
            <configuration>
                <createDependencyReducedPom>false</createDependencyReducedPom>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.sandwormz.jettycore.NotezWebsocketMain</mainClass>
                            </transformer>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                <resource>META-INF/spring.handlers</resource>
                            </transformer>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                <resource>META-INF/spring.schemas</resource>
                            </transformer>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                <resource>META-INF/services/javax.ws.rs.ext.MessageBodyReader</resource>
                            </transformer>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                <resource>META-INF/services/javax.ws.rs.ext.MessageBodyWriter</resource>
                            </transformer>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.sandwormz.jettycore.NotezWebsocketMain</mainClass>
                            </transformer>
                        </transformers>
                        <filters>
                            <filter>
                                This is required if we want anything build on top of this
                                to
                                compile without security errors.
                                <artifact>*</artifact>
                                <excludes>
                                    <exclude>**/*.MF</exclude>
                                    <exclude>**/*.SF</exclude>
                                    <exclude>**/*.DSA</exclude>
                                </excludes>
                            </filter>
                        </filters>
                    </configuration>
                </execution>
            </executions>
        </plugin>

Надеюсь, это кому-то поможет.

0 голосов
/ 07 ноября 2011

Собираете ли вы все классы в один jar (включая классы из модулей jersey)? Если это так, то похоже, что вам не хватает некоторых файлов META-INF или вы объединили их таким образом, что один файл с тем же именем в одном модуле перезаписал файл с таким же именем из другого модуля.

...