我的jar中缺少标准的邮件正文阅读器提供程序

时间:2011-11-07 16:08:23

标签: java jersey client

我现在必须错过两天......

我有一个简单的jar应用程序,它使用泽西客户端jar。 当我从Eclipse或mvn exec运行我的主类时,一切都很顺利。

当我构建我的jar然后用java -jar运行它时,我得到:

  

com.sun.jersey.api.client.ClientHandlerException:找不到Java类java.lang.String和Java类型类java.lang.String的消息体读取器,并且找不到MIME媒体类型application / json

即。我客户的提供者列表中缺少所有标准Java类型的体读者提供者。

我在客户端的pom.xml依赖项中声明:

  • Jersey的客户端
  • 球衣核
  • Jersey的JSON
  • Jersey的服务器
  • 杰克逊映射器-ASL
  • 杰克逊核-ASL
  • Jersey的多

使我的应用程序正常工作的唯一方法是在我的客户端配置中声明StringProvider类...

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

但是这个提供程序的解除只能是自定义bean所必需的吗?标准bean提供程序默认是可访问的?不是吗?

2 个答案:

答案 0 :(得分:7)

我发现它差不多一年发布了,但事实证明我的问题是由于使用阴影将所有东西合并到一个罐子里。添加几个变压器似乎已经解决了问题。我的阴影插件现在看起来像这样:

         <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>

希望这有助于某人。

答案 1 :(得分:0)

您是否将所有类捆绑在一个jar中(包括来自jersey模块的类)?如果是这样,那么这看起来就像你缺少一些META-INF文件,或者你以一种方式合并它,即一个模块中的一个同名文件覆盖了来自其他模块的同名文件。