Acabo de empezar a aprender el servidor web de Virgo. Estoy tratando de trabajar con Jakcson JSON en la aplicación Spring MVC. En este momento no puedo obtener un objeto serializado de solicitud GET. el servidor devuelve "406 no es aceptable":406 No aceptable en la aplicación Spring MVC (OSGi, Virgo Web Server) usando Jackson, Rome y JAXB2
The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers().
El mismo problema surge cuando se utilizan Roma y JAXB2.
Aquí es los archivos de configuración del proyecto y código:
Fragmento pom.xml:
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>com.springsource.org.codehaus.jackson</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>com.springsource.org.codehaus.jackson.mapper</artifactId>
<version>1.0.0</version>
</dependency>
MANIFIEST.MF
Manifest-Version: 1.0
Import-Bundle: com.springsource.org.apache.taglibs.standard;version="[
1.1.2,1.3)",com.springsource.org.codehaus.jackson;version="[1.0.0,1.0
.0]",com.springsource.org.codehaus.jackson.mapper;version="[1.0.0,1.0
.0]"
Bundle-Version: 2.3.0
Tool: Bundlor 1.0.0.RELEASE
Bundle-Name: GreenPages Web
Import-Library: org.springframework.spring;version="[3.0, 3.1)"
Bundle-ManifestVersion: 2
Bundle-SymbolicName: greenpages.web
Web-ContextPath: greenpages
Import-Package: javax.servlet.jsp.jstl.core;version="[1.1.2,1.2.0)",ja
vax.sql,org.apache.commons.dbcp,org.eclipse.virgo.web.dm;version="[2.
0.0, 3.0.0)",org.springframework.core.io;version="[3.0.0.RELEASE,3.1.
0)",org.springframework.stereotype;version="[3.0.0.RELEASE,3.1.0)",or
g.springframework.ui;version="[3.0.0.RELEASE,3.1.0)",org.springframew
ork.web.bind.annotation;version="[3.0.0.RELEASE,3.1.0)",org.springfra
mework.web.servlet.mvc.annotation;version="[3.0.0.RELEASE,3.1.0)",org
.springframework.web.servlet.view;version="[3.0.0.RELEASE,3.1.0)"
Web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<welcome-file-list>
<welcome-file>/WEB-INF/pages/index.jsp</welcome-file>
</welcome-file-list>
<!-- CONFIGURE A PARENT APPLICATION CONTEXT -->
<context-param>
<param-name>contextClass</param-name>
<param-value>org.eclipse.virgo.web.dm.ServerOsgiBundleXmlWebApplicationContext</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- DISPATCHER SERVLET CONFIG -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
</web-app>
despachador -servle t.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<context:component-scan base-package="greenpages.web"/>
<!-- Configures the @Controller programming model -->
<mvc:annotation-driven />
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
GreenPagesController.java
package greenpages.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class GreenPagesController {
@RequestMapping("/home.htm")
public void home() {
}
// MappingJacksonHttpMessageConverter (requires Jackson on the classpath - particularly useful for serving JavaScript clients that expect to work with JSON)
@RequestMapping(value="/json.htm", method=RequestMethod.POST)
public @ResponseBody String readJson(@RequestBody JavaBean bean) {
return "Read from JSON " + bean;
}
@RequestMapping(value="/json.htm", method=RequestMethod.GET)
public @ResponseBody Object writeJson() {
return new Object();
}
}
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Simple jsp page</title>
<script type="text/javascript" src="/greenpages/scripts/jquery-1.4.4.min.js"></script>
<script type="text/javascript">
$.getJSON("json.htm", function(message) {
console.log(message);
});
</script>
</head>
<body>
<form action="test.htm" method="get">
<input type="text" name="name">
<input type="submit">
</form>
</body>
</html>
AJAX Solicitud http://localhost:8080/greenpages/json.htm: Solicitar encabezados de Firebug:
GET /greenpages/json.htm HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
X-Requested-With: XMLHttpRequest
Referer: http://localhost:8080/greenpages/
Cookie: JSESSIONID=18000E4E096D7978F61F5D1E8105B784; JSESSIONID=35FB0925786699EC587A1B64F30517AD
Encabezados de respuesta:
HTTP/1.1 406 Not Acceptable
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=utf-8
Content-Length: 1070
Date: Tue, 07 Dec 2010 11:15:58 GMT
¿Cuál puede ser el problema?
he añadido los datos de las cabeceras de solicitud de Firebug. Gracias por su respuesta. – Alexey
@Alexey - Bien, ahora que es interesante, ciertamente parece que estás enviando los encabezados de aceptar correctos. Eso significa que, en teoría, su servidor no está devolviendo json o javascript. Personalmente, todavía no he usado los servicios de Internet, pero ¿hay alguna forma de interceptar/inspeccionar la respuesta para asegurarse de que realmente es json? –