IBM Liberty上的MobileFirst适配器中的jax-rs ClientBuilder

时间:2016-09-13 10:40:03

标签: ibm-mobilefirst jax-rs websphere-liberty mobilefirst-adapters

我的目标是使用 jax-rs 客户端连接到 MobileFirst Java适配器内的后端,但我真的卡住了,需要帮助

抛出异常的代码:

javax.ws.rs.client.Client client = javax.ws.rs.client.ClientBuilder.newClient();

抛出的异常:

  

java.lang.ClassNotFoundException:org.glassfish.jersey.client.JerseyClientBuilder`

代码位于 IBM Liberty服务器上部署的 MobileFirst服务器版本8.0 上的Java适配器内。

jaxrsClient-2.0 jaxrs-2.0 功能在server.xml的服务器功能管理器中启用。

<feature>jaxrs-2.0</feature>
<feature>jaxrsClient-2.0</feature>

应用程序类的加载配置如下:

<application id="mfp" name="mfp" location="mfp-server.war" type="war">
  <classloader delegation="parentLast" apiTypeVisibility="spec, ibm-api, third-party"></classloader>
</application>

以下是异常跟踪:

    java.lang.RuntimeException: java.lang.ClassNotFoundException: org.glassfish.jersey.client.JerseyClientBuilder
        at javax.ws.rs.client.ClientBuilder.newBuilder(ClientBuilder.java:103)
        at javax.ws.rs.client.ClientBuilder.newClient(ClientBuilder.java:114)
        at 
...............................
        at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:83)
        at com.ibm.ws.tcpchannel.internal.WorkQueueManager.requestComplete(WorkQueueManager.java:504)
        at com.ibm.ws.tcpchannel.internal.WorkQueueManager.attemptIO(WorkQueueManager.java:574)
        at com.ibm.ws.tcpchannel.internal.WorkQueueManager.workerRun(WorkQueueManager.java:929)
        at com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker.run(WorkQueueManager.java:1018)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at java.lang.Thread.run(Thread.java:722)
    Caused by: java.lang.ClassNotFoundException: org.glassfish.jersey.client.JerseyClientBuilder
        at com.ibm.mfp.server.core.shared.ParentLastClassLoader.findClass(ParentLastClassLoader.java:192)
        at com.ibm.mfp.server.core.shared.ParentLastClassLoader.loadClass(ParentLastClassLoader.java:165)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:186)
        at javax.ws.rs.client.FactoryFinder.newInstance(FactoryFinder.java:113)
        at javax.ws.rs.client.FactoryFinder.find(FactoryFinder.java:206)
        at javax.ws.rs.client.ClientBuilder.newBuilder(ClientBuilder.java:86)
        ... 69 more

请帮忙!

3 个答案:

答案 0 :(得分:1)

我正在研究类似的要求,我在解决异常之前尝试了许多组合。 我不确定为什么自由不提供客户端实现类.. 你可以尝试通过maven pom.xml包括jersey-client ..

<dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-client</artifactId>
            <version>2.23.1</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>org.eclipse.persistence.moxy</artifactId>
            <version>2.6.1</version>
</dependency>

在Server.xml中删除功能

<feature>jaxrs-2.0</feature>
<feature>jaxrsClient-2.0</feature>

并添加以下功能。

<feature>beanValidation-1.1</feature>

答案 1 :(得分:0)

Liberty IS 提供客户端实现,但parentLast类加载器委派阻止它被使用。

似乎MobileFirst正在打包Jersey,在这种情况下,应禁用Liberty的JAX-RS功能,以便使用Jersey。这可能需要您更改maven / gradle工件中声明依赖项的方式。

答案 2 :(得分:0)

Suresh的解决方案奏效了。我只需要在我的pom.xml中添加更多依赖项。我认为我不需要Moxy ..将进一步优化。

<dependency>
    <groupId>org.glassfish.hk2</groupId>
    <artifactId>hk2-core</artifactId>
    <version>2.5.0-b61</version>
</dependency>
<dependency>
    <groupId>org.glassfish.hk2</groupId>
    <artifactId>hk2-api</artifactId>
    <version>2.5.0-b42</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-common</artifactId>
    <version>2.9.1</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-client</artifactId>
    <version>2.9.1</version>
</dependency>
<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>org.eclipse.persistence.moxy</artifactId>
    <version>2.6.4</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.9.5</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.5</version>
</dependency>