无法使RemoteServiceRelativePath和XML工作(GWT)

时间:2011-07-27 21:46:04

标签: xml gwt xml-rpc rpc

我认为我的GTW项目的XML文件配置不正确,因为当我尝试联系远程服务时出现此错误:“问题访问/ myresults / compress。原因:NOT_FOUND ”。如果有人可以帮助我,请在下面找到我的代码的重要部分,我认为它与RemoteServiceRelativePath和我的XML有关。

UPDATE:当我在web.xml中更改URL-PATTERN的内容时,我仍然使用path / myresults / compress获得完全相同的消息。

CompressionService.java

package myProject.client;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
/* The client side stub for the RPC service. */
@RemoteServiceRelativePath("compress")
public interface CompressionService extends RemoteService {
    String compress(String name) throws IllegalArgumentException;
}

CompressionServiceImpl.java

package myProject.server;
import myProject.client.CompressionService;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
/* The server side implementation of the RPC service. */
public class CompressionServiceImpl extends RemoteServiceServlet implements
        CompressionService {
    public String compress(String input) throws IllegalArgumentException {
        String output = "aaaa";
        return output;
    }
}

CompressionService.java

package myProject.client;
import com.google.gwt.user.client.rpc.AsyncCallback;
/* The async counterpart of <code>CompressService</code> */
public interface CompressionServiceAsync {
    void compress(String input, AsyncCallback<String> callback)
            throws IllegalArgumentException;
}

的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <servlet>
    <servlet-name>compressionService</servlet-name>
    <servlet-class>myProject.server.CompressionServiceImpl</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>compressionService</servlet-name>
    <url-pattern>/myresults/compress</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>MyResults.html</welcome-file>
  </welcome-file-list>
</web-app>

MyResults.gwt.xml

<?xml version="1.0" encoding="UTF-8"?>
<module rename-to='myresults'>
  <inherits name='com.google.gwt.user.User'/>
  <inherits name='com.google.gwt.user.theme.clean.Clean'/>
  <entry-point class='myProject.client.MyResults'/>
  <source path='client'/>
  <source path='shared'/>
</module>

MyResults.java

private final CompressionServiceAsync compressionService = GWT.create(CompressionService.class);
compressionService.compress(text, new AsyncCallback<String>() {
              public void onFailure(Throwable caught) {
                // Show the RPC error message to the user
                download.setText(caught.getMessage()));             
              }
              public void onSuccess(String result) {
                download.setText(result);
              }
});

2 个答案:

答案 0 :(得分:2)

我猜你已经在思考正确的路线了。问题似乎是您的@RemoteServiceRelativePath和web.xml url-mapping彼此不一致。

将web.xml中的servlet映射更改为以下内容可能会解决您的问题:

  <servlet-mapping>
    <servlet-name>compressionService</servlet-name>
    <url-pattern>/compress</url-pattern>
  </servlet-mapping>

答案 1 :(得分:0)

我遇到了一个类似的问题,即使删除了所有 GWT 生成的文件和浏览器历史记录,web.xml 中的 servlet 路径也没有在应用程序中更新。 更奇怪的是,这个问题只出现在 Chrome 而不是 Firefox。

事实证明,Chrome 仍在从系统启动时显示的 GWT 临时目录中加载旧版本的 web.xml: 超级开发模式启动 工作目录:C:\Users<用户名>\AppData\Local\Temp\gwt-codeserver-3864057753329430362.tmp

从这个临时目录中删除数据后,Chrome 中的应用程序也更新了。