我的团队几乎发布了所有功能的可执行jar(不是applet,只是为了清楚)。我们的新可执行文件之一是依赖于Jersey的Web服务客户端。我正在尝试使用自动POJO映射工具来解组响应(即,我在ClientConfig中将JSONConfiguration.FEATURE_POJO_MAPPING设置为true)但是当我执行jar时,我得到“我不知道如何解组此响应”消息:
SEVERE: A message body reader for Java class edu.mit.broad.picard.bass.GetSite, and Java type class edu.mit.broad.picard.bass.GetSite, and MIME media type application/json was not found
如果我从IDE(IntelliJ)运行它,该应用程序工作正常。我认为jar文件的打包方式存在问题,但我不知道泽西(或杰克逊)的细节是否足以解决这个问题。任何提示?
这是Java 1.7,Jersey捆绑1.17.1和Jackson 1.9.13。所有com/sun/**/*
和org/codehaus/**/*
文件都包含在jar中。
感谢您的帮助!!
编辑: 我检查了META-INF目录所需的... / services目录。这就是它的内容:
cm59f-0fa:zamboni jrose$ jar tvf GenerateGetSite.jar | grep META-INF | grep services
0 Thu Aug 15 10:43:32 EDT 2013 META-INF/services/
0 Thu Feb 28 15:29:04 EST 2013 META-INF/services/com.sun.jersey.server.impl.model.method.dispatch.ResourceMethodDispatchProvider
514 Thu Feb 28 15:29:04 EST 2013 META-INF/services/com.sun.jersey.spi.HeaderDelegateProvider
563 Thu Feb 28 15:29:04 EST 2013 META-INF/services/com.sun.jersey.spi.StringReaderProvider
147 Thu Feb 28 15:29:04 EST 2013 META-INF/services/com.sun.jersey.spi.container.ContainerProvider
60 Thu Feb 28 15:29:04 EST 2013 META-INF/services/com.sun.jersey.spi.container.ContainerRequestFilter
0 Thu Feb 28 15:29:04 EST 2013 META-INF/services/com.sun.jersey.spi.container.ContainerResponseFilter
377 Wed Feb 27 20:17:28 EST 2013 META-INF/services/com.sun.jersey.spi.container.ResourceMethodCustomInvokerDispatchProvider
376 Wed Feb 27 20:17:28 EST 2013 META-INF/services/com.sun.jersey.spi.container.ResourceMethodDispatchProvider
64 Thu Feb 28 15:29:04 EST 2013 META-INF/services/com.sun.jersey.spi.container.WebApplicationProvider
267 Thu Feb 28 15:29:04 EST 2013 META-INF/services/com.sun.jersey.spi.inject.InjectableProvider
44 Wed Feb 27 20:17:06 EST 2013 META-INF/services/javax.enterprise.inject.spi.Extension
882 Mon Dec 19 14:53:22 EST 2011 META-INF/services/javax.script.ScriptEngineFactory
79 Wed Feb 27 20:17:06 EST 2013 META-INF/services/javax.servlet.ServletContainerInitializer
2880 Thu Feb 28 15:29:04 EST 2013 META-INF/services/javax.ws.rs.ext.MessageBodyReader
2654 Thu Feb 28 15:29:04 EST 2013 META-INF/services/javax.ws.rs.ext.MessageBodyWriter
56 Thu Feb 28 15:29:04 EST 2013 META-INF/services/javax.ws.rs.ext.RuntimeDelegate`
答案 0 :(得分:4)
我的猜测是你要创建一个包含所有jar依赖项内容的jar。如果是这种情况,问题可能是由于你的一个罐子的不正确构造。泽西岛依靠META-INF /服务中的资源来实现正常运营。您需要确保META-INF / services的内容合并到您的一个jar中。
对我来说有一个选择是maven-shade-plugin,它包含一个完全符合这种合并的转换器:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
</transformers>
</configuration>
</plugin>