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 JavaException 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?
¿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
Por favor, díganos qué servidor de aplicaciones Java usa. Por cierto, ya hay jersey 1.9 lanzado, podrías actualizarlo. –
@sjngm Sí, estoy ejecutando solo esta aplicación. – Mohan