【问题标题】:Web Services in a Vaadin applicationVaadin 应用程序中的 Web 服务
【发布时间】:2014-08-22 16:26:10
【问题描述】:

我有一个向其中添加了 Web 服务的 Vaadin 应用程序,现在似乎只有 Web 服务在 Web 应用程序上运行。我在服务器上看到了 Vaadin 活动,但它的 UI 从未出现,只是一条关于只有 Web 服务可用的消息。

“目前只有通过网络服务提供的功能。”

来源可以在这里找到:https://javydreamercsw@bitbucket.org/javydreamercsw/validation-manager

更新: 我尝试评论网络服务,但仍然得到相同的效果。以下是请求的 web.xml 文件内容:

    <?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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">
    <display-name>Vaadin Web Application</display-name>
    <context-param>
        <description>Vaadin production mode</description>
        <param-name>productionMode</param-name>
        <param-value>false</param-value>
    </context-param>
    <!--Comment if not using H2 database-->
    <context-param>
        <param-name>db.url</param-name>
        <param-value>jdbc:h2:file:~/VM/data/validation-manager;CREATE=TRUE;AUTO_SERVER=TRUE;DB_CLOSE_ON_EXIT=FALSE</param-value>
    </context-param>
    <context-param>
        <param-name>db.user</param-name>
        <param-value>root</param-value>
    </context-param>
    <context-param>
        <param-name>db.password</param-name>
        <param-value/>
    </context-param>
    <listener>
        <listener-class>org.h2.server.web.DbStarter</listener-class>
    </listener>
    <!--End of H2 database exclusive settings-->
    <filter>
        <description>Make GB2312\GBK or others to UTF-8 for chineese character support</description>
        <filter-name>SetCharacterEncodingFilter</filter-name>
        <filter-class>net.sourceforge.javydreamercsw.validation.manager.web.filter.SetCharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <listener>
        <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>Vaadin Application Servlet</servlet-name>
        <servlet-class>com.vaadin.server.VaadinServlet</servlet-class>
        <init-param>
            <description>Vaadin UI to display</description>
            <param-name>UI</param-name>
            <param-value>com.validation.manager.ValidationManagerUI</param-value>
        </init-param>
        <init-param>
            <description>Application widgetset</description>
            <param-name>widgetset</param-name>
            <param-value>com.validation.manager.AppWidgetSet</param-value>
        </init-param>
    </servlet>
    <servlet>
        <servlet-name>ValidationManagerService</servlet-name>
        <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Vaadin Application Servlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>ValidationManagerService</servlet-name>
        <url-pattern>/ValidationManagerService</url-pattern>
    </servlet-mapping>
</web-app>

Web 服务注释:

package net.sourceforge.javydreamercsw.validation.manager.web.service;

import com.validation.manager.core.DataBaseManager;
import com.validation.manager.core.VMException;
import com.validation.manager.core.db.Project;
import com.validation.manager.core.db.VmUser;
import com.validation.manager.core.db.controller.ProjectJpaController;
import com.validation.manager.core.server.core.ProjectServer;
import com.validation.manager.core.tool.MD5;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import org.openide.util.Exceptions;

/**
 *
 * @author Javier A. Ortiz Bultron <javier.ortiz.78@gmail.com>
 */
@WebService(serviceName = "VMWebService")
public class VMWebService {

    private Map<String, Object> parameters = new HashMap<>();

    /**
     * Web service operation
     */
    @WebMethod(operationName = "getVMUser")
    public VmUser getVMUser(@WebParam(name = "user") final String username,
            @WebParam(name = "pass") final String password) throws VMException {
        VmUser user = isValidUser(username, password);
        if (user == null) {
            throw new VMException("Invalid username and/or password!");
        }
        return user;
    }

    private VmUser isValidUser(String username, String password) {
        VmUser user = null;
        parameters.clear();
        parameters.put("username", username);
        List<Object> result
                = DataBaseManager.namedQuery("VmUser.findByUsername",
                        parameters);
        if (result != null) {
            for (Object obj : result) {
                if (obj instanceof VmUser) {
                    try {
                        VmUser vmuser = (VmUser) obj;
                        if (vmuser.getPassword().equals(MD5.encrypt(password))) {
                            user = vmuser;
                        }
                    } catch (Exception ex) {
                        Exceptions.printStackTrace(ex);
                    }
                }
            }
        }
        return user;
    }

    /**
     * Web service operation
     */
    @WebMethod(operationName = "getProject")
    public Project getProject(@WebParam(name = "project") final Project project,
            @WebParam(name = "user") final VmUser user) throws VMException {
        Project p = null;
        if (isValidUser(user.getUsername(), user.getPassword()) != null) {
            p = new ProjectServer(project).getEntity();
        }
        return p;
    }

    /**
     * Web service operation
     */
    @WebMethod(operationName = "getRootProjects")
    public List<Project> getRootProjects(@WebParam(name = "user") final VmUser user)
            throws VMException {
        List<Project> projects = new ArrayList<>();
        if (isValidUser(user.getUsername(), user.getPassword()) != null) {
            ProjectJpaController controller
                    = new ProjectJpaController(DataBaseManager.getEntityManagerFactory());
            for (Project p : controller.findProjectEntities()) {
                if (p.getParentProjectId() == null) {
                    projects.add(p);
                }
            }
        }
        return projects;
    }

    /**
     * Web service operation
     */
    @WebMethod(operationName = "saveProject")
    public boolean saveProject(@WebParam(name = "newProject") final Project newProject,
            @WebParam(name = "user") final VmUser user) throws VMException {
        boolean result = false;
        if (isValidUser(user.getUsername(), user.getPassword()) != null) {
            ProjectServer ps = new ProjectServer(newProject);
            ps.copy(newProject);
            result = true;
        }
        return result;
    }
}

【问题讨论】:

  • 我认为您在 web.xml(或通过注释)中的 servlet 映射不正确。请给他们看
  • 添加了所需的详细信息。不想在问题中发送太多垃圾邮件。这就是我添加存储库链接的原因。
  • vaadin 的映射在哪里?
  • 更新了文件内容,部分改动还没有推送到远程仓库。
  • 您可以尝试从网络浏览器访问一些静态 VAADIN/... 资源吗?你的配置对我来说看起来不错。您使用的 servlet 容器前面是否有某种网络服务器? (你用什么引擎?)

标签: web-services vaadin


【解决方案1】:

我们也遇到过类似的问题,试试这个:

<servlet-mapping>
    <servlet-name>Vaadin Application Servlet</servlet-name>
    <url-pattern>/admin/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>Vaadin Application Servlet</servlet-name>
    <url-pattern>/VAADIN/*</url-pattern>
</servlet-mapping>

【讨论】:

    【解决方案2】:

    这是我的工作原理:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" 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_3_0.xsd">
        <display-name>validation-manager</display-name>
        <!--Comment if not using H2 database-->
        <context-param>
            <param-name>db.url</param-name>
            <param-value>jdbc:h2:file:~/VM/data/validation-manager;CREATE=TRUE;AUTO_SERVER=TRUE;DB_CLOSE_ON_EXIT=FALSE</param-value>
        </context-param>
        <context-param>
            <param-name>db.user</param-name>
            <param-value>root</param-value>
        </context-param>
        <context-param>
            <param-name>db.password</param-name>
            <param-value/>
        </context-param>
        <context-param>
            <description>Vaadin production mode</description>
            <param-name>productionMode</param-name>
            <param-value>true</param-value>
        </context-param>
        <listener>
            <listener-class>org.h2.server.web.DbStarter</listener-class>
        </listener>
        <!--End of H2 database exclusive settings-->
        <filter>
            <description>Make GB2312\GBK or others to UTF-8 for chineese character support</description>
            <filter-name>SetCharacterEncodingFilter</filter-name>
            <filter-class>net.sourceforge.javydreamercsw.validation.manager.web.filter.SetCharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
        </filter>
        <listener>
            <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
        </listener>
        <servlet>
            <servlet-name>Vaadin Application Servlet</servlet-name>
            <servlet-class>com.vaadin.server.VaadinServlet</servlet-class>
            <init-param>
                <description>Vaadin UI to display</description>
                <param-name>UI</param-name>
                <param-value>net.sourceforge.javydreamercsw.validation.manager.web.ValidationManagerUI</param-value>
            </init-param>
            <init-param>
                <description>Application widgetset</description>
                <param-name>widgetset</param-name>
                <param-value>net.sourceforge.javydreamercsw.validation.manager.web.AppWidgetSet</param-value>
            </init-param>
        </servlet>
        <servlet>
            <servlet-name>VMWebService</servlet-name>
            <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>VMWebService</servlet-name>
            <url-pattern>/VMWebService</url-pattern>
        </servlet-mapping>
        <session-config>
            <session-timeout>
                30
            </session-timeout>
        </session-config>
    </web-app>
    

    【讨论】:

      猜你喜欢
      • 2021-05-13
      • 1970-01-01
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      相关资源
      最近更新 更多