我正在尝试在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及更高版本。
我已经将球衣罐更新为球衣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而不是客户端库和服务器库可以解决此问题。你可以试试。
REST API版本控制 - java我目前在基于Java的Web应用程序上工作。最近,我们使用Spring创建了一些REST端点。这样做的原因是因为我们开发了一种混合移动应用程序,该应用程序通过这些端点与我们的主应用程序集成。问题是,今后我们还不确定如何处理更新。如果我们更新API,例如我们更改端点方法的方法签名,或者更改作为JSON返回的DTO上的属性,那么如果我们的移动用户运行的是过时版本…
Java:正则表达式模式匹配器是否有大小限制? - java我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)
泽西岛2日志记录和gzip - java我已经为ResourceConfig注册了LogginFilter过滤器。// Enable logging of requests registerInstances(new LoggingFilter(java.util.logging.Logger.getLogger(this.getClass().getName()), true)); 我还启用了G…
Java:线程池如何将线程映射到可运行对象 - java试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …
JAVA:字节码和二进制有什么区别? - javajava字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…