我正在使用GWT/P構建一個webapp,它使用javax.ws.rs.client來與rest服務進行通信。
使用的是Jersey客戶端:
<jersey.version>2.22.2</jersey.version>
<dependencyManagement>
<依賴性>
<dependency>
<groupId>org.glassfish.jersey</groupId>
<artifactId>jersey-bom</artifactId>
<版本>${jersey.version}</version>
<type>pom</type>
<范圍>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<依賴性>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
</dependency>
<依賴性>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
</dependency>
它被部署在tomcat上(7和9版本,都按預期作業)。然而,在一臺ubuntu服務器上,使用tomcat 9,我得到了以下例外:
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: com.sun.ws.rs.ext.RuntimeDelegateImpl
at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:122)
at javax.ws.rs.ext.RuntimeDelegate.getInstance(RuntimeDelegate.java:91)
at javax.ws.rs.core.UriBuilder.newInstance(UriBuilder.java:69)
at javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:80)
at javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:99)
at org.glassfish.jersey.client.JerseyWebTarget.<init>(JerseyWebTarget.java:71)
at org.glassfish.jersey.client.JerseyClient.target(JerseyClient.java:290)
at org.glassfish.jersey.client.JerseyClient.target(JerseyClient.java:76)
我不知道為什么它在尋找com.sun.ws.rs.ext.RuntimeDelegateImpl而不是org.glassfish.jersey.internal.RuntimeDelegateImpl,而且只發生在那個特定的服務器上(windows、amazon AWS linux、docker linux作業正常)。
我已經嘗試將 jersey 的版本增加到 2.27(不能再增加了,因為新版本與 GWT jetty 9.2.14 有沖突)。
我試著添加META-INF/services/javax.ws.rs.ext.RuntimeDelegate,第一行為org.glassfish.jersey.internal.RuntimeDelegateImpl。
似乎沒有什么作業。我在這里錯過了什么?有什么想法嗎?
uj5u.com熱心網友回復:
gwt-rest-dispatch包括jsr311-api.jar,這導致了問題。 洗掉這個依賴(因為我的專案不使用它)解決了這個問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/319413.html
標籤:
