2016-03-19 3 views
2

Ich habe einen RESTful Client mit Jersey 2.15 geschrieben und den RankRetrieve (R & R) Service von IBM Watson aufgerufen. Der Code-Snippet funktioniert aus Eclipse-Umgebung sowie ein Krieg aus Tomcat bereitgestellt 7 und holt das Ergebnis JSON aus dem R & R ServiceJersey Client mit zwei Ergebnissätzen bei Tomcat und Websphere Liberty Profil

HttpAuthenticationFeature basicAuthCredentials = HttpAuthenticationFeature.basic(this.userName, this.password); 
Client client = ClientBuilder.newClient(); 
client.register(basicAuthCredentials); 
WebTarget webTarget = client.target(this.buildUri()) 
          .queryParam("ranker_id", this.rankerID) 
          .queryParam("q", searchTerm) 
          .queryParam("wt", "json"); 
Invocation.Builder invocationBuilder = webTarget.request(MediaType.TEXT_PLAIN_TYPE) 
               .accept(MediaType.APPLICATION_JSON); 
Response response = invocationBuilder.get(); 
String resultString = response.readEntity(String.class); 
System.out.println("RankRetrieve Response: " + resultString); 

Aber wenn die gleiche IST-Datei in Websphere LibertyProfile 8.5.5.7 eingesetzt wird die Antwort empfangen ist 404.

{"responseHeader":{"status":400,"QTime":0},"error":{"msg":"Bad contentType for search handler :text/xml request={q=theQuestions&ranker_id=SomeRankerID&wt=json}","code":400}} 

ich begann dann über WLP & Jersey suchen und stieß auf Artikel wie JAX-RS Jersey Client on Websphere 8.5

A lso während im Debug-Modus, wenn ich beobachte webTarget unter Tomcat, sehe ich den Inhalt wie folgt:

webTarget : JerseyWebTarget { https://<URL>?ranker_id=someRankerID&q=theQuestions&wt=json } 

Aber die gleiche Uhr unter WLP zeigt mir wie folgt:

webTarget : [email protected]16 

In der gleichen Anwendung, In einigen anderen Klassen verbraucht der Jersey Client auch andere Dienste und funktioniert wie erwartet unter WLP. Daher kann ich nicht herausfinden, warum dieser Code unter WLP nicht wie erwartet funktioniert.

Dies ist mein erstes Java-Projekt und ich habe versucht, online/Lesen SO/lesen WLP-Dokumentation, aber keiner hat mir aufgedeckt, was der Grund ist, der gleiche Code holt mich Ergebnisse unter Tomcat und nicht unter WLP.

Ich kann WLP nicht von unseren Servern entfernen, da es viele andere Anwendungen beherbergt, aber jede Hilfe in Bezug auf das Problem wird geschätzt.

+0

Haben Sie versucht, die Jaxrs-Funktion in der Freiheit zu deaktivieren, da Sie Ihr eigenes Impl bereitstellen? Es könnte durch Eclipse oder implizit durch z.B. webPorfile oder ee7 Funktionen. Überprüfen Sie server.xml – covener

+0

Ich habe in der WLP-Dokumentation gesucht, aber nicht in der Lage, die Beispiele zu verstehen, da meine Datei server.xml nichts enthält, was in der Dokumentation beschrieben ist. – user6083088

Antwort

0

Die Ursache ist eingebaut cxf WebTargetImpl wurde zuerst dann Jersey geladen. Deaktivieren

Option 1), um die Funktion jaxrs, können Sie die /usr/servers//logs/message.log überprüfen, um zu sehen, ob es irgendwelche jaxrs aktiviert Eigenschaft: com.ibm.ws.kernel.feature.internal.FeatureManager Ein CWWKF0012I: Der Server installiert die folgenden Funktionen: [.... jaxrs-2.0 ...]

Option 2) Veränderung Classloader Politik parentLast: ..

Option 3) entfernen Sie alle Trikot Gläser und aktivieren Jaxrs-2.0-Funktion dann versuchen.

Neal