我先给你讲个短篇。如果我在 Eclipse 中使用 jar 文件导出我的 jar 文件(Runnable Jar 向导并选择“Package required libraries...”)而不是“Extract required libraries”,那么一切正常,但运行起来非常缓慢。如果我使用提取方法构建我的 jar,代码将导致最终
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json
我没有使用 Maven。我还不知道。在大多数情况下,我大多对 Eclipse 缺乏经验,但我已经到了那里。我以为 Genson 会给我创建 JSON 所需的东西。
如果我列出我的 jar 文件和 grep 的 MessageBodyWriter,我会得到
1220 Tue Nov 15 10:29:02 CST 2016 javax/ws/rs/ext/MessageBodyWriter.class
47 Tue Nov 15 10:29:02 CST 2016 META-INF/services/javax.ws.rs.ext.MessageBodyWriter
为了获得更长的故事,我在 Eclipse 中创建了一个简单的 Java 项目,将外部 jars 添加到我的构建路径中。Eclipse 不会抱怨缺少任何东西。我的代码中只有一两个关于未使用的 this-and-thats 的警告。无论我怎么做,导出都很好,没有问题。只有处决才会显示出一些恼怒。
在我的请求课程中,我相信我已经正确设置了所有内容。这是可以想象到的最简单的 POST 客户端。我有必要的空构造函数,正确的注释。
@XmlRootElement
@Produces(MediaType.APPLICATION_JSON)
public class QQNotificationRequest {
@JsonProperty("id")
private int id;
@JsonProperty("subId")
private int subId;
@JsonProperty("type")
private int type;
@JsonProperty("scode")
private int scode;
@JsonProperty("datetime")
private String datetime;
...
这是我失败的终极召唤
Response resp = m_webTarget.request(MediaType.APPLICATION_JSON).post(Entity.json(message));
这些是我的外部罐子
javax.ws.rs-api-2.0.1.jar
aopalliance-repackaged-2.5.0-b05.jar
hk2-api-2.5.0-b05.jar
hk2-locator-2.5.0-b05.jar
hk2-utils-2.5.0-b05.jar
javassist-3.20.0-GA.jar
javax.annotation-api-1.2.jar
javax.inject-2.5.0-b05.jar
javax.servlet-api-3.0.1.jar
jaxb-api-2.2.7.jar
jersey-guava-2.24.jar
org.osgi.core-4.2.0.jar
osgi-resource-locator-1.0.1.jar
persistence-api-1.0.jar
validation-api-1.1.0.Final.jar
jersey-client.jar
jersey-common.jar
jersey-container-servlet.jar
jersey-container-servlet-core.jar
jersey-media-jaxb.jar
jersey-server.jar
jargs.jar
genson-1.4.jar
jt400.jar
log4j-api-2.7.jar
log4j-core-2.7.jar
我觉得罐子里有些东西没有正确“导出”,但我不确定。只是在这里猜测,因为 Java 必须经历分解大 jar 中所有 jar 的过程,它会找到开始执行所需的内容,而对于大 jar 中的 .classes,它不会。
暂时迷路了,但还是坚持了下来。我很感激任何指示。