Smartgwt RestDataSource con SpringMVC y cliente cruzado

Después de mucho trabajo, tengo una aplicación de servicios web de back-end que funciona con Spring-RS, Spring MVC, los controladores Spring y estos controladores, que utilizan Jackson dentro del framework Spring para convertir las respuestas a JSON.

Aquí es parte de WEB-INF / myproject-servlet.xml

<mvc:annotation-driven>
    <mvc:message-converters register-defaults="true">
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
          <property name="objectMapper">
             <bean class="com.fasterxml.jackson.databind.ObjectMapper">

                     <property name="dateFormat">
                        <bean class="java.text.SimpleDateFormat">
                            <constructor-arg type="java.lang.String" value="yyyy-MM-dd"></constructor-arg>
                        </bean>
                     </property>
             </bean>
          </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

<bean id="jsonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
    <property name="supportedMediaTypes" value="application/json"/>
</bean>

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
  <property name="messageConverters">
      <list>
        <ref bean="jsonHttpMessageConverter" />
      </list>
  </property>
</bean>

Esta aplicación de servicios web funciona muy bien! Puedo desplegar el WAR en mi tomcat local, y se despliega bien. Puedo probar el controlador de la unidad para asegurarme de que la URL sea correcta y que la aplicación web esté configurada correctamente dentro de Spring. Puedo golpear la URL y recuperar los datos JSON exactamente como esperaba. La url es:

http://mylocalhost/myproject/invoices/invoiceId/1

Devuelve 1 factura.

Ahora, estoy ejecutando una aplicación web SmartGWT, la versión gratuita, y tengo un controlador RestDataScource. He escrito muchas aplicaciones web SmartGWT anteriormente, y estas aplicaciones incluían todo: entidades, dao's, capa de servicio, controladores y fuentes de datos. Con esto, no hubo problemas entre clientes siempre que los controladores y las fuentes de datos estuvieran dentro de la misma aplicación. Y no estoy en contra de hacer eso otra vez, pero quiero tratar de separarlos.

Hace poco vi que esto no funciona !!! Con mi aplicación web SmartGWT ejecutándose localmente dentro de Jetty para el modo de desarrollo. La URL de inicio es:

     http://mylocalhost:8888/myapp

Y cuando esto intenta llamar al back-end en

    http://mylocalhost:8080/my-ws, then my listgrid gives me a warning message.

Si solo puedo agregar una línea: RPCManager.setAllowCrossDomainCalls (true); ¿Agrego esto dentro de mi RESTDataSource? ¿Dónde agrego esto a? ¿Y realmente solo hará que todo funcione? ¿Hay algo más que deba agregar?

Entonces, estaba buscando en XJSONDataSource y vi que necesitaba hacer algunos cambios en mi RestDataSource para convertirlo en un XJsonDataSource. Hay una gran información aquí con otra publicación y sugirieron agregar:

   // Where do I put this line?   the controller or the datasource
   String callbackString = request.getParameter("callback");

   // Where do I put this code?  the controller or the datasource
   response.setContentType("text/X-JSON");
   response.getWriter().write( callbackString + " ( " + JSONstring + " ) " );
   response.setStatus(HttpServletResponse.SC_OK);  

No estoy seguro de a dónde va este código, por lo que necesito ayuda adicional allí. En lo que respecta al controlador, esto es parte de lo que parece:

    @RequestMapping(value = "/invoiceId", method = RequestMethod.GET, headers = "Accept=application/json")
    public @ResponseBody
        InvoiceDetailDTO getContactTypeByUserId(@RequestBody String invoiceNumber)
     {
         InvoiceDetailDTO invoiceDetailDto = invoiceService.getInvoiceDetail(invoiceNumber);

        // invoiceDetailDto is automatically converted to JSON by Spring
        return invoiceDetailDto;
     }

En el código anterior con "solicitud" y "respuesta" tienen que ir al controlador, ¿cómo hago para eso?

En última instancia, me encantaría usar mi RestDataSource y modificarlo para que funcione de la manera que quiero, e ignorar cualquiera de estos problemas entre sitios. Si necesito usar XJSONDataSource, solo necesito algunos ejemplos realmente buenos, y un ejemplo sobre cómo modificar mis controladores si es necesario.

¡Gracias!

Respuestas a la pregunta(1)

Su respuesta a la pregunta