簡體   English   中英

Eclipse GWT Java Tomcat-上傳到托管服務器時的序列化策略問題

[英]Eclipse GWT Java Tomcat - Serialisation policy issue when I upload to the hosting server

我已經使用Eclipse(4.3.2)和GWT對應用程序進行了更改,並在可以工作的本地Tomcat上對其進行了測試。 但是,當我將其上傳到托管服務器時(不僅是更改的類,我還進行了完整上傳),當我嘗試使用它(登錄)時,在日志中出現以下錯誤:

INFO: Server startup in 20107 ms
Nov 04, 2014 5:41:33 PM org.apache.catalina.core.ApplicationContext log
INFO: mySQLConnection: ERROR: The serialization policy file '/org.AwardTracker.AwardTracker/C7227FD579DD02DA4BB5B3EBAD09AE79.gwt.rpc' was not found; did you forget to include it in this deployment?
Nov 04, 2014 5:41:33 PM org.apache.catalina.core.ApplicationContext log
INFO: mySQLConnection: WARNING: Failed to get the SerializationPolicy 'C7227FD579DD02DA4BB5B3EBAD09AE79' for module 'http://tc1165.metawerx.com.au/org.AwardTracker.AwardTracker/'; a legacy, 1.3.3 compatible, serialization policy will be used.  You may experience SerializationExceptions as a result.
Nov 04, 2014 5:41:40 PM org.apache.catalina.core.ApplicationContext log
SEVERE: Exception while dispatching incoming RPC call
com.google.gwt.user.client.rpc.SerializationException: Type 'org.AwardTracker.client.ViewData' was not assignable to 'com.google.gwt.user.client.rpc.IsSerializable' and did not have a custom field serializer.For security purposes, this type will not be serialized.: instance = org.AwardTracker.client.ViewData@62066d5c



    at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:667)
    at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:130)
    at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter$ValueWriter$8.write(ServerSerializationStreamWriter.java:153)
    at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:587)
    at com.google.gwt.user.server.rpc.RPC.encodeResponse(RPC.java:605)
    at com.google.gwt.user.server.rpc.RPC.encodeResponseForSuccess(RPC.java:471)
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:563)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:265)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:305)
    at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:277)
    at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:274)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAsPrivileged(Subject.java:536)
    at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:309)
    at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:169)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:297)
    at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:55)
    at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:191)
    at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:187)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:186)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:277)
    at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:274)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAsPrivileged(Subject.java:536)
    at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:309)
    at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:249)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
    at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:55)
    at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:191)
    at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:187)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:186)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.

java:745)

0    [catalina-exec-12] INFO  gwtupload.server.UploadServlet  - UPLOAD-SERVLET init: maxSize=3145728, slowUploads=0, isAppEngine=false, corsRegex=^$
2    [catalina-exec-12] INFO  gwtupload.server.UploadServlet  - UPLOAD-ACTION init: removeSessionFiles=false, removeData=false

我所做的更改是:AccountUpdateView.java,在其中添加了標簽和文本框以顯示“組”(客戶端)AccountAndCubs.java,在其中添加了要在AccountUpdateView.java中顯示的新字段(獲取和設置)(客戶端)MySQLConnection.java,我在其中將新字段添加到了sql調用(服務器端)

在搜索中,我發現了一些與此相關的信息,建議我添加“ static final long serialVersionUID = 1L;”。 到我更改的類(AccountUpdateView.java),但是我仍然收到此錯誤。

我注意到這一行:

SEVERE: Exception while dispatching incoming RPC call
com.google.gwt.user.client.rpc.SerializationException: Type 'org.AwardTracker.client.ViewData' was not assignable to 'com.google.gwt.user.client.rpc.IsSerializable' and did not have a custom field serializer.For security purposes, this type will not be serialized.: instance = org.AwardTracker.client.ViewData@62066d5c

這表示“ ViewData.java”存在一個問題,該問題我尚未更改,但已經存在:

package org.AwardTracker.client;

import java.io.Serializable;

public class ViewData implements Serializable {
    private static final long serialVersionUID = 1L;

您的幫助將不勝感激。 另外,我不是很熟練,仍在學習中,所以請耐心並使用簡單的語言。


根據要求添加:

ViewData代碼:

package org.AwardTracker.client;

import java.io.Serializable;

public class ViewData implements Serializable {
    private static final long serialVersionUID = 1L;

    private String accountId;
    private String accountLevel;
    private String ymId;
    private String awId;
    private String adAwardGroup;
    private String adScoutGroup;

    public ViewData() {
        //just here because GWT wants it.
    }

    public String getaccountId() {
        return accountId;
    }   
    public void setaccountId(String accountId) {
        this.accountId = accountId;
    }

    public String getaccountLevel() {
        return accountLevel;
    }   
    public void setaccountLevel(String accountLevel) {
        this.accountLevel = accountLevel;
    }

    public String getymId() {
        return ymId;
    }   
    public void setymId(String ymId) {
        this.ymId = ymId;
    }

    public String getawId() {
        return awId;
    }   
    public void setawId(String awId) {
        this.awId = awId;
    }

    public String getadAwardGroup() {
        return adAwardGroup;
    }
    public void setadAwardGroup(String adAwardGroup) {
        this.adAwardGroup = adAwardGroup;
    }

    public String getadScoutGroup() {
        return adScoutGroup;
    }
    public void setadScoutGroup(String adScoutGroup) {
        this.adScoutGroup = adScoutGroup;
    }

}

AccountsAndCubs.java代碼(已添加“組”):

package org.AwardTracker.client;

import com.google.gwt.user.client.rpc.IsSerializable;
import java.util.Date;

public class AccountAndCubs implements IsSerializable {

    static final long serialVersionUID = 1L;

    //@SuppressWarnings("unused")
    private String accountId;
    //@SuppressWarnings("unused")
    private String emailaddress;
    //@SuppressWarnings("unused")
    private String password;
    //@SuppressWarnings("unused")
    private String level;
    //@SuppressWarnings("unused")
    private String pack;
    //@SuppressWarnings("unused")
    private Integer enabled;
    //@SuppressWarnings("unused")
    private Date archived;
    //@SuppressWarnings("unused")
    private String group;
    //@SuppressWarnings("unused")
    private String acaId;
    //@SuppressWarnings("unused")
    private String cdId;
    //@SuppressWarnings("unused")
    private String surname;
    //@SuppressWarnings("unused")
    private String firstname;

    @SuppressWarnings("unused")
    private AccountAndCubs() {
        //just here because GWT wants it.
    }
    public AccountAndCubs(String accountId, String emailaddress, String password, String level, String pack,
            Integer enabled, Date archived, String group, String acaId, String cdId, String surname, String firstname) {
        this.accountId = accountId;
        this.emailaddress = emailaddress;
        this.password = password;
        this.level = level;
        this.pack = pack;
        this.enabled = enabled;
        this.archived = archived;
        this.group = group;
        this.acaId = acaId;
        this.cdId = cdId;
        this.surname = surname;
        this.firstname = firstname;
    }

    public String getAccountId() {
        return accountId;
    }
    public void setAccountId(String accountId) {
        this.accountId = accountId;
    }

    public String getEmailAddress() {
        return emailaddress;
    }
    public void setEmailAddress(String emailaddress) {
        this.emailaddress = emailaddress;
    }

    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

    public String getLevel() {
        return level;
    }
    public void setLevel(String level) {
        this.level = level;
    }

    public String getPack() {
        return pack;
    }
    public void setPack(String pack) {
        this.pack = pack;
    }

    public Integer getEnabled() {
        return enabled;
    }
    public void setEnabled(Integer enabled) {
        this.enabled = enabled;
    }

    public Date getArchived() {
        return archived;
    }
    public void setArchived(Date archived) {
        this.archived = archived;
    }

    public String getGroup() {
        return group;
    }
    public void setGroup(String group) {
        this.group = group;
    }

    public String getAcaId() {
        return acaId;
    }
    public void setAcaId(String acaId) {
        this.acaId = acaId;
    }

    public String getCdId() {
        return cdId;
    }
    public void setCdId(String cdId) {
        this.cdId = cdId;
    }

    public String getSurname() {
        return surname;
    }
    public void setSurname(String surname) {
        this.surname = surname;
    }

    public String getFirstName() {
        return firstname;
    }
    public void setFirstName(String firstname) {
        this.firstname = firstname;
    }

}

@ IgorKlimer,@ ChrisHinshaw謝謝您的幫助。

經過一番嘗試和錯誤后,我終於可以解決這個問題了。 萬一您想知道(將來會對您有所幫助),我:

  1. 從主機服務器刪除了ROOT.war(要上傳,我需要壓縮war並將重命名的文件重命名為ROOT.war,當我將其上傳到主機的服務器時,該文件會自動安裝並安裝),然后重新啟動

  2. 重新啟動后,我在服務器上上傳了我的工作文件ROOT.war

  3. 重新啟動服務器

  4. 重新啟動后,我嘗試了該應用程序-同樣的問題

  5. 由於某種原因,我將主機服務器上的某個級別升級到private-cgi-bin並找到了另一個ROOT.war,因此我刪除了它

  6. 然后我回到private-cgi-bin / tomcat並刪除了ROOT.war

  7. 然后我重新啟動服務器

  8. 重新啟動后,我然后上傳了我的ROOT.war

  9. 上傳后,我重新啟動了服務器

  10. 重新啟動后,我進入Tomcat Manager,然后選擇Reload

  11. 然后,我啟動了Chrome並清除了緩存

  12. 然后,我嘗試了該應用程序並使其工作,我檢查了更改,這些更改在那里並可以正常工作,我做了一些測試,並檢查了系統日志-一切正常。

問候,

格林

雖然,我還沒有弄清楚實際的解決方法(不能嘗試使用您的解決方法,因為在測試環境中無法刪除ROOT.war),但是我得到了一些可能對其他人有用的解決方法。

上述問題的主要問題是:

找不到序列化策略文件'/org.AwardTracker.AwardTracker/C7227FD579DD02DA4BB5B3EBAD09AE79.gwt.rpc'; 您是否忘記將其包含在此部署中?

通常,發生這種情況是因為已部署的WAR文件包含應用程序文件夾,並且其中包含rpc文件。 但是,由於tomcat緩存或其他任何問題,它仍在尋找先前部署中使用的舊rpc文件。

因此,解決方法是,備份以前的文件並再次復制到應用程序文件夾。

應用文件夾結構

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM