2014-08-22 3 views
0

У меня есть приложение Vaadin, к которому я добавил веб-службы, и теперь веб-службы, похоже, работают в веб-приложении. Я вижу активность Vaadin на сервере, но пользовательский интерфейс никогда не появляется, просто сообщение о доступных только веб-сервисах.Веб-службы в приложении Vaadin

«Только функциональность через веб-службы, доступные в настоящее время».

Источник можно найти здесь: https://[email protected]/javydreamercsw/validation-manager

Update: Я попытался comenting веб-службы и до сих пор получил тот же эффект. Вот запрошенные 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 Service аннотации:

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 <[email protected]> 
*/ 
@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; 
    } 
} 
+1

Я думаю, что ваши отображения сервлетов в нас b.xml (или через аннотации) неверны. Пожалуйста, покажите им –

+0

Добавленные данные. Не хотел спамить так много в вопросе. Вот почему я добавил ссылки репозитория. – javydreamercsw

+0

Где находится картография для материала ваадина? –

ответ

0

Вот как я получил это работает:

<?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> 
0

Мы имели подобные проблемы, попробуй это:

<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> 
Смежные вопросы