Java REST ful 客户端代码有问题

标签 java rest

我正在尝试用 Java 创建 REST-ful Web 服务。 此 REST-ful Web 服务包含 Hibernate 配置和 Rest-ful 配置。 实际上 java web 服务工作完美。但是当我尝试执行该 Web 服务的客户端代码时。

正在使用的jar文件是

activation
antlr-2.7.6
asm-3.1
asm-attrs
cglib-nodep
commons-collections-2.1.1
commons-fileupload-1.2.1
commons-io-1.3.2
commons-logging-1.1
dom4j-1.6.1
ehcache-1.2.3
ejb3-persistence
grizzly-servlet-webserver-1.7.3.2
hibernate-annotations
hibernate-commons-annotations
hibernate-entitymanager
hibernate-tools
hibernate3
http
javassist
jaxb-api
jaxb-impl
jaxb-xjc
jdbc2_0-stdext
jdom-1.0
jersey-core-1.7
jersey-server-1.7
jersey-spring
jersey
jettison-1.0-RC1
jsr173_api
jsr311-api
jta
mysql-connector-java-5.1.12-bin
osgi
rome-0.9
wadl2java

我的问题是

Exception in thread "main" java.lang.NoSuchMethodError: com.sun.jersey.spi.inject.InjectableProviderContext.getInjectable(Ljava/lang/Class;Lcom/sun/jersey/spi/service/ComponentContext;Ljava/lang/annotation/Annotation;Ljava/lang/Object;Ljava/util/List;)Lcom/sun/jersey/spi/inject/Injectable;
        at com.sun.jersey.spi.service.ComponentConstructor.getConstructor(ComponentConstructor.java:139)
        at com.sun.jersey.impl.application.ComponentProviderCache.getComponent(ComponentProviderCache.java:177)
        at com.sun.jersey.impl.application.ComponentProviderCache.getProvidersAndServices(ComponentProviderCache.java:122)
        at com.sun.jersey.impl.application.MessageBodyFactory.getProviderMap(MessageBodyFactory.java:133)
        at com.sun.jersey.impl.application.MessageBodyFactory.initReaders(MessageBodyFactory.java:107)
        at com.sun.jersey.impl.application.MessageBodyFactory.init(MessageBodyFactory.java:102)
        at com.sun.jersey.api.client.Client.<init>(Client.java:284)
        at com.sun.jersey.api.client.Client.<init>(Client.java:209)
        at com.sun.jersey.api.client.Client.create(Client.java:429)
        at pack1.client.Test.main(Test.java:20)

客户端Java代码是

package pack1.client;

import java.net.URI;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;

public class Test {
    public static void main(String[] args) {
        ClientConfig config = new DefaultClientConfig();
        Client client = Client.create(config);
        WebResource service = client.resource(getBaseURI());
        System.out.println(service.path("resources").path("hello").path("xml").accept(
                        MediaType.TEXT_PLAIN).get(ClientResponse.class));
    }
    private static URI getBaseURI() {
            return UriBuilder.fromUri("http://localhost/WebServicePgm1").build();
    }
}

试图在客户端代码中测试的方法是

    @GET
    @Path("xml")
    @Produces(MediaType.TEXT_XML)
    public String sayXMLHello() {
        return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey </hello>";
    }

更改jar文件后

上面的问题解决了,又出现了新的问题。

@ gkatkov 我现在正在使用 Apache Tomcat 6.0.20。 我已将 jersey jar 更新为 jersey 1.8。更新 jar 文件后出现另一个错误

我现在放的jar文件是

jersey-server-1.8.jar
jersey-json-1.8.jar
jersey-core-1.8.jar
jersey-client-1.8.jar

现在的问题是

com.sun.jersey.spi.inject.Errors processErrorMessages
SEVERE: The following errors and warnings have been detected with resource and/or provider classes:
  SEVERE: Missing dependency for field: javax.ws.rs.core.UriInfo com.sun.jersey.impl.template.ViewableMessageBodyWriter.ui
  SEVERE: Missing dependency for field: com.sun.jersey.spi.template.TemplateContext com.sun.jersey.impl.template.ViewableMessageBodyWriter.tc
Exception in thread "main" com.sun.jersey.spi.inject.Errors$ErrorMessagesException
        at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170)
        at com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136)
        at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:199)
        at com.sun.jersey.api.client.Client.<init>(Client.java:187)
        at com.sun.jersey.api.client.Client.<init>(Client.java:170)
        at com.sun.jersey.api.client.Client.create(Client.java:679)
        at pack1.client.Test.main(Test.java:20)

我需要放其他jar文件吗?

最佳答案

我遇到了同样的问题。我发现分别使用 jersey-bundle-1.8.jar 代替客户端和服务器库可以解决这个问题。你可以试试。

关于Java REST ful 客户端代码有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7117202/

相关文章:

c# - java 中 C# System.Windows.Forms.SendKeys.Send 方法的替代方法

java - 创建一个可以点击的 JFrame

java - 未检测到控制键

python - 如何在 Restful Flask 中上传文件?

java - 如何在Mule ESB消息流中添加要上传的文件?

java - Android - OpenCV 模板与阈值匹配

java - 如何为 Jersey 中的空值返回 HTTP 404 而不是 HTTP 204 响应代码

rest - 如何通过REST请求更改更改Kibana保存的搜索(发现)?

javascript - 从 Google Sheets 连接到 Bitfinex API

node.js - MongoDb find() 返回大量不需要的字段