2011-08-19 13 views
6

Estoy tratando de crear el servicio web REST-ful en java. Este servicio web REST-ful contiene configuración de Hibernate y configuración Rest-ful. En realidad, el servicio web de Java funciona perfectamente. pero cuando intento ejecutar el código del cliente para ese servicio web.Java REST código de cliente ful es problema

los archivos JAR que estoy usando es

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 

Mi problema es

código Java
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) 

cliente es

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(); 
    } 
} 

El método que estoy tratando de probar en el código de cliente, que es

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

después de cambiar el archivo jar

el problema anterior se resuelve y el nuevo problema se produjo.

@ gkatkov estoy usando Apache Tomcat 6.0.20 y ahora. he actualizado el jersey jar a jersey 1.8. después de actualizar el archivo jar estoy recibiendo otro error que es

archivo JAR que pongo ahora es

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

Ahora el problema es

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) 

¿Es necesario poner cualquier otro archivo jar?

+0

¿Es esta la única aplicación web que se ejecuta en ese servidor? Tal vez tengas otra con una versión diferente de jersey-JAR y el servidor se confunde. De acuerdo con [JavaDoc] (http://jersey.java.net/nonav/apidocs/1.7/jersey/com/sun/jersey/spi/inject/InjectableProviderContext.html) esa llamada al método parece legítima. – sjngm

+0

Por favor, díganos qué servidor de aplicaciones Java usa. Por cierto, ya hay jersey 1.9 lanzado, podrías actualizarlo. –

+0

@sjngm Sí, estoy ejecutando solo esta aplicación. – Mohan

Respuesta

2

Sufrí el mismo problema. Descubrí que el uso de jersey-bundle-1.8.jar en lugar de la biblioteca de cliente y servidor, respectivamente, podría resolver este problema. puedes probarlo.

Cuestiones relacionadas