2011-08-19 95 views
6

我正嘗試在java中創建REST-ful web服務。 這個REST-ful web服務包含Hibernate配置和Rest-ful配置。 其實java web服務工作正常。但是當我嘗試執行該Web服務的客戶端代碼時。Java REST Full客戶端代碼是問題

是我使用的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文件後,我得到的另一個錯誤是,我把現在

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文件

Jar文件?

+0

這是在該服務器上運行的唯一的網絡應用程序?也許你有另一個版本不同的jersey-JAR,服務器會感到困惑。根據[JavaDoc](http://jersey.java.net/nonav/apidocs/1.7/jersey/com/sun/jersey/spi/inject/InjectableProviderContext.html),該方法調用似乎是合法的。 – sjngm

+0

請告訴我們您使用的是什麼Java應用程序服務器。順便說一句,已經發布球衣1.9,你可以更新它。 –

+0

@sjngm是我只運行這個應用程序。 – Mohan

回答

2

我遭受了同樣的問題。我發現分別使用jersey-bundle-1.8.jar而不是客戶端和服務器庫可以解決這個問題。你可以嘗試一下。