2017-05-31 67 views
0

我正在尝试使用JAX -WS来执行Web应用程序。我的问题似乎很简单,但我不明白如何解决它。我有我需要在GET和POST请求中使用的类变量。例如,我在GET方法中启动“响应”,然后我需要在POST方法中使用它,但是当我从js调用POST api/conversation时,我收到一个错误,因为'响应'仍然为空。我如何保存变量的值?这里是我的代码在JAX-WS请求之间使用变量

import javax.ws.rs.*; 

@ApplicationPath("api") 
@Path("conversation") 
public class Conversation { 
    private final String conversationWorkspace = "myworkspace"; 
    private final static String CONVERSATION_ID = "myid"; 
    private final static String CONVERSATION_PASS = "mypass"; 

private MessageRequest request; 
private MessageResponse response; 

private ConversationService service; 

@GET 
@Produces("application/text") 
public String getInitiatePhrase(){ 
    service = new ConversationService("2017-05-26", CONVERSATION_ID, CONVERSATION_PASS); 
    response = service.message(conversationWorkspace, null).execute(); //here response gets its value 

    return response.getText().get(0); 
} 

@POST 
@Produces("application/text") 
@Consumes("application/text") 
public String getBotAnswer(String userText){ 
    System.out.println("response " + response); 
    request = new MessageRequest.Builder().inputText(userText).context(response.getContext()).build(); //response must not be null 
    response = service.message(conversationWorkspace, request).execute(); 

    return response.getText().get(0); 
} 

}

回答

0

有问题的Java类似乎并没有成为一个容器管理的Bean。当您对GET进行休息服务调用并随后调用POST方法时,会创建两个单独的Conversation类实例。因此,第二次POST调用中的类字段响应将为空。

有多种方法可以解决这个问题。但是,采取的方法取决于回答这个问题:服务是否应该真正意识到两个单独的客户端请求?或者客户端应该进行一次GET调用,然后为后续的POST提供所需的信息。

我会使用方法1中记下面,除非有很好的理由为使用2,3或4(图2,3和4是类似的只是它们是不同规格/框架)

  1. 的客户端缓存GET的响应和对POST请求
  2. 使用一个EE状态会话bean发送所需的信息回到(http://docs.oracle.com/javaee/6/tutorial/doc/gipjg.html
  3. 使用CDI会话范围的bean(http://docs.oracle.com/javaee/6/tutorial/doc/gjbbk.html
  4. 使用弹簧会话作用域bean( http://springinpractice.com/2008/05/08/session-scoped-beans-in-spring/https://tuhrig.de/making-a-spring-bean-session-scoped/
+0

我使用了1种方法,它工作。谢谢! – Tanya