gibt Ich gebe Ihnen die Kurzgeschichte zuerst. Wenn ich in Eclipse meine JAR-Datei mit JAR-Dateien (der Runnable-Jar-Wizard und "Paket benötigte Bibliotheken ...") anstelle von "Extrahiere benötigte Bibliotheken" exportiere, funktioniert alles, aber es ist quälend langsam in Gang zu kommen. Wenn ich mein Glas mit der Extraktionsmethode baue, wird der Code einen eventuellen Fehler verursachen.Mein erster Web-Client, der "MessageBodyWriter nicht für Medientyp gefunden ..." (JSON)
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json
Ich benutze nicht Maven. Ich weiß es noch nicht. Ich bin größtenteils mit Eclipse größtenteils unerfahren, aber ich komme dorthin. Ich dachte, Genson würde mir geben, was ich brauche, um JSON zu erstellen.
Wenn ich meine JAR-Datei und grep für MessageBodyWriter Liste, ich
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
auf die längeren Geschichte zu erhalten, habe ich ein einfaches Java-Projekt in Eclipse, hinzugefügt externe Gläser zu meinem Build-Pfad. Eclipse beschwert sich nicht über etwas fehlt. Es gibt nur eine oder zwei Warnungen über unbenutzte Dies und Das in meinem Code. Der Export funktioniert gut, egal wie ich es mache, keine Probleme. Nur die Ausführung zeigt einige Irritationen.
In meiner Anfrageklasse glaube ich, dass ich alles richtig eingerichtet habe. Dies ist der einfachste vorstellbare POST-Client. Ich habe den erforderlichen leeren Konstruktor, die richtigen Annotationen.
@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;
...
Dies ist meine letzte Anruf, der
Response resp = m_webTarget.request(MediaType.APPLICATION_JSON).post(Entity.json(message));
Das sind meine externe Gläser nicht
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
Ich fühle mich wie es etwas in das Glas ist, das nicht ‚exportiert‘ werden richtig, aber ich bin mir nicht sicher. Ich rate hier nur, dass Java durch den Prozess der Explosion aller Gläser innerhalb des großen Glases gehen muss, dass es findet, was es benötigt, um die Ausführung zu beginnen, während es bei den .classes innerhalb des großen Glases nicht der Fall ist.
Verloren für den Moment, aber stecken zusammen. Ich schätze alle Hinweise.
Als @peekskillet erklärte das Problem ist, dass nur eine dieser Services-Deklarationsdatei exportiert wird - Sie brauchen eine Möglichkeit, sie zusammenzuführen. In Bezug auf Genson können Sie es auch manuell registrieren, überprüfen Sie das Trikot doc [hier] (http://owlike.github.io/genson/Documentation/Extensions/#jax-rs-jersey--cie). – eugen
Ich verstehe die @peekskillet-Antwort noch nicht vollständig und Ihr Link sagt, dass nur das Löschen von Genson in den Klassenpfad automatisches Glück verursacht. :-) Was ich nicht wirklich verstehe, ist, warum das Programm funktioniert, wenn das Glas ein paar Gläser ist, oder ein Glas mit extrahierten Gläsern. Ich werde es noch genauer durcharbeiten. –
Nicht mehr als 2 Minuten, nachdem ich den obigen Kommentar eingegeben habe, habe ich es über die extrahierte Gläser-Methode arbeiten lassen. Ich ging in Build Path-> Configure Build Path und auf der Registerkarte "Order and Export", verschoben Genson-1.4.jar an den Anfang der Liste und exportiert mein Projekt in eine ausführbare jar und getestet. So weit, ist es gut. –