Smartgwt RestDataSource com SpringMVC e cross-client

Depois de muito trabalho, tenho um aplicativo de serviços da web de back-end existente que é alimentado por Spring-RS, Spring MVC, controladores Spring e esses controladores do usuário Jackson na estrutura Spring para converter respostas em JSON.

Aqui faz parte do 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>

Este aplicativo de serviços da Web funciona muito bem! Eu posso implantar o WAR no meu tomcat local e ele é implantado bem. Eu posso testar o controlador para ter certeza de que o URL está correto e o web-app está configurado corretamente no Spring. Eu posso acessar a URL e recuperar os dados JSON exatamente como esperava. O URL é:

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

devolve 1 fatura.

Agora, estou executando um aplicativo da Web do SmartGWT, a versão gratuita, e tenho um controlador RestDataScource. Já escrevi muitos aplicativos da web do SmartGWT antes, e esses aplicativos eram inclusivos: entidades, dao, camada de serviço, controladores e origens de dados. Com isso, não houve problemas entre clientes, desde que os controladores e as fontes de dados estivessem no mesmo aplicativo. E não sou contra fazer isso de novo, mas quero tentar separá-los.

Eu só recentemente vi que isso não funciona !!! Com meu aplicativo da web SmartGWT sendo executado localmente no Jetty para o modo de desenvolvimento. O URL inicial é:

     http://mylocalhost:8888/myapp

E quando isso tenta chamar o back-end em

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

Se eu puder adicionar apenas uma linha: RPCManager.setAllowCrossDomainCalls (true); Eu adiciono isso dentro do meu RESTDataSource? Onde eu adiciono isso? E isso realmente fará tudo funcionar? Há mais alguma coisa que eu precise adicionar?

Então, eu estava olhando para XJSONDataSource e vi que precisava fazer algumas alterações no meu RestDataSource para convertê-lo em um XJsonDataSource. Há ótimas informações aqui com outra postagem e eles sugeriram adicionar:

   // 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);  

Eu não tenho certeza onde esse código vai, então eu preciso de alguma ajuda extra lá. Tanto quanto o controlador vai, aqui é parte do 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;
     }

No código acima com "pedido" e "resposta" tem que ir para o controlador, como faço para isso?

Em última análise, eu adoraria apenas usar o meu RestDataSource e ajustá-lo para trabalhar do jeito que eu quero, e ignorar qualquer um desses problemas entre sites. Se eu precisar usar XJSONDataSource, preciso apenas de alguns bons exemplos reais e de um exemplo de como ajustar meus controladores, se necessário.

Obrigado!

questionAnswers(1)

yourAnswerToTheQuestion