struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Pablo Vázquez Blázquez <pvazq...@denodo.com>
Subject Re: File Upload
Date Fri, 18 Jan 2008 10:32:57 GMT
Error de lectura XML: contenido incorrecto tras un elemento XML del 
documento
Ubicación: http://localhost:8080/scheduler-admintool-1.0/AddPlugin.do
Número de línea 8, columna 1:<form id="addPluginForm" 
name="addPluginForm" onsubmit="return true;" 
action="/scheduler-admintool-1.0/AddPlugin.do" method="post" 
enctype="multipart/form-data">
^

That´s the result if I try without the ajax theme on the form.

Yes, I would like to use the ajax theme.

Thanks.

Jeromy Evans escribió:
> Are you deliberately trying to do an XHR file upload? Have you tried 
> it without the ajax theme on the form?
>
> Pablo Vázquez Blázquez wrote:
>> Yes yes, that debugging statement is executed. That´s why I know my 
>> plugin is created.
>>
>> "Anadido plugin " + uploadFileName means "Added plugin " + 
>> uploadFileName.
>>
>> And then, it goes to ShowPlugins and the debugging statement
>> log.debug("Obtenidos plugins"); (Getted all plugins) is also executed.
>>
>>
>>
>> Cheng Wei Lee escribió:
>>> Was this debugging statement executed?
>>>
>>>            log.debug("Anadido plugin " + uploadFileName);
>>>
>>>
>>> On Jan 18, 2008 12:13 AM, Pablo Vázquez Blázquez <pvazquez@denodo.com>
>>> wrote:
>>>
>>>  
>>>> Here I send you my JSP and Action code.
>>>>
>>>> Yes, when I submit, the new plugin is added (I know it because of my
>>>> logs), but I don´t know why I don´t get the result page.
>>>>
>>>> Thank you.
>>>>
>>>> PD: I have now tried without struts.multipart.parser, but it 
>>>> doesn´t work.
>>>>
>>>> ****** JSP ******
>>>>
>>>> <jsp:root xmlns="http://www.w3.org/1999/xhtml"
>>>>    xmlns:jsp="http://java.sun.com/JSP/Page"
>>>>    xmlns:fmt="http://java.sun.com/jsp/jstl/fmt"
>>>>    xmlns:c="http://java.sun.com/jsp/jstl/core"
>>>>    xmlns:s="/struts-tags"
>>>>    version="2.0">
>>>>
>>>>    <!-- Tabla con los plugins. Si no hay ninguno, se muestra un 
>>>> mensaje
>>>> -->
>>>>    <table class="pluginsTable" cellspacing="0px" cellpadding="3px"
>>>> border="1px">
>>>>        <tbody>
>>>>            <tr>
>>>>                <td class="tableTitle" colspan="5">
>>>>                    <fmt:message key="PluginsTable.Title"/>
>>>>                </td>
>>>>            </tr>
>>>>            <tr>
>>>>                <td class="tableHeader">
>>>>                    <fmt:message key="PluginsTable.Name"/>
>>>>                </td>
>>>>                <td class="tableHeader">
>>>>                    <fmt:message key="PluginsTable.JarFile"/>
>>>>                </td>
>>>>                <td class="tableHeader">
>>>>                    <fmt:message key="PluginsTable.PluginClass"/>
>>>>                </td>
>>>>                <td class="tableHeader">
>>>>                    <fmt:message key="PluginsTable.Type"/>
>>>>                </td>
>>>>                <td class="tableHeader">
>>>>                    <fmt:message key="PluginsTable.Actions"/>
>>>>                </td>
>>>>            </tr>
>>>>            <c:if test="${empty plugins}">
>>>>                <tr>
>>>>                    <td class="tableMessage" colspan="5">
>>>>                        <fmt:message key="PluginsTable.NoPlugins"/>
>>>>                    </td>
>>>>                </tr>
>>>>            </c:if>
>>>>            <c:forEach items="${plugins}" var="plugin" 
>>>> varStatus="status">
>>>>                <!-- stuff -->
>>>>            </c:forEach>
>>>>        </tbody>
>>>>    </table>
>>>>
>>>>
>>>>    <!-- Form to add plugin -->
>>>>    <s:form id="addPluginForm" name="addPluginForm" theme="ajax"
>>>>            action="AddPlugin" enctype="multipart/form-data" 
>>>> method="post">
>>>>
>>>>        <div class="field">
>>>>            <span class="label">
>>>>                <fmt:message key="PluginsTable.File"/>*:
>>>>            </span>
>>>>            <span class="entry">
>>>>                <s:file name="upload" size="40"
>>>>                    accept="application/java-archive"/>
>>>>                <span id="errorId" class="errorMessage">
>>>>                    <s:property value="fieldErrors['upload'][0]" />
>>>>                </span>
>>>>                <span id="errorId" class="errorMessage">
>>>>                    <s:property 
>>>> value="fieldErrors['uploadContentType'][0]"
>>>> />
>>>>                </span>
>>>>            </span>
>>>>        </div>
>>>>
>>>>        <!-- BOTONES -->
>>>>        <jsp:directive.include file="FormButtons.jspf"/>
>>>>
>>>>    </s:form>
>>>>
>>>> </jsp:root>
>>>>
>>>>
>>>> ****** FORMBUTTONS.JSPF****
>>>>
>>>> <!-- BUTTONS-->
>>>> <div class="button">
>>>>    <span class="buttonLeft">
>>>>        <s:submit type="button"
>>>>                targets="configAjaxContent" executeScripts="true"
>>>>                showLoadingText="false" indicator="indicator"
>>>> cssClass="submit">
>>>>            <s:param name="value">
>>>>                <fmt:message key="Buttons.accept"/>
>>>>            </s:param>
>>>>        </s:submit>
>>>>    </span>
>>>>    <span class="buttonRight">
>>>>        <!-- cancelar -->
>>>>        <s:url id="CancelUrl" action="CancelConfiguration"/>
>>>>        <s:submit type="button" targets="configAjaxContent"
>>>>                showLoadingText="false" cssClass="reset"
>>>> href="${CancelUrl}">
>>>>            <s:param name="value">
>>>>                <fmt:message key="Buttons.cancel"/>
>>>>            </s:param>
>>>>        </s:submit>
>>>>    </span>
>>>> </div>
>>>>
>>>>
>>>>
>>>> *****ACTION *****
>>>> public class AddPluginAction extends DefaultRequestResponseAction {
>>>>
>>>>    private static final long serialVersionUID = 1516786859681901796L;
>>>>
>>>>    /**
>>>>     * Logger for this class
>>>>     */
>>>>    private static final Log log = 
>>>> LogFactory.getLog(AddPluginAction.class
>>>> );
>>>>
>>>>    private File upload;
>>>>    private String uploadContentType;
>>>>    private String uploadFileName;
>>>>
>>>>    @Override
>>>>    protected String doExecute() throws Exception {
>>>>
>>>>        clearErrorsAndMessages();
>>>>
>>>>        Context context =
>>>>            SessionManager.getRemoteServerContext(getRequest());
>>>>
>>>>        SchedulerManager facade =
>>>>            SessionManager.getUserFacadeDelegate(getRequest(), 
>>>> context);
>>>>
>>>>        try {
>>>>
>>>>            byte[] filedata = readInputStream(new 
>>>> FileInputStream(upload));
>>>>
>>>>            facade.addPlugin(uploadFileName, filedata);
>>>>
>>>>            log.debug("Anadido plugin " + uploadFileName);
>>>>
>>>>        } catch (ConnectException e) {
>>>>            log.error(e);
>>>>            throw new InternalErrorException(e);
>>>>
>>>>        } catch (DuplicateInstanceException e) {
>>>>            log.error(e);
>>>>            addFieldError("upload",
>>>>                    getText("PluginsTable.File.Duplicate"));
>>>>
>>>>        } catch (FileNotFoundException e) {
>>>>            log.error(e);
>>>>            addFieldError("upload",
>>>>                    getText("PluginsTable.File.NotFound"));
>>>>
>>>>        } catch (Exception e) {
>>>>            log.error(e);
>>>>            addFieldError("uploadContentType",
>>>>                    getText("ErrorMessages.file.incorrectExtension"));
>>>>        }
>>>>
>>>>        if (hasErrors()) {
>>>>            return Action.INPUT;
>>>>        }
>>>>
>>>>        return Action.SUCCESS;
>>>>    }
>>>>
>>>>
>>>>    /*
>>>>     * Read an input stream in its entirety into a byte array
>>>>     */
>>>>    private static byte[] readInputStream(InputStream inputStream)
>>>>        throws IOException {
>>>>
>>>>        ....
>>>>
>>>>        return content;
>>>>    }
>>>>
>>>>    /**
>>>>     * Getters/Setters
>>>>     * @return
>>>>     */
>>>>
>>>>    public File getUpload() {
>>>>        return upload;
>>>>    }
>>>>
>>>>
>>>>    public void setUpload(File upload) {
>>>>        this.upload = upload;
>>>>    }
>>>>
>>>>
>>>>    public String getUploadContentType() {
>>>>        return uploadContentType;
>>>>    }
>>>>
>>>>
>>>>    public void setUploadContentType(String uploadContentType) {
>>>>        this.uploadContentType = uploadContentType;
>>>>    }
>>>>
>>>>
>>>>    public String getUploadFileName() {
>>>>        return uploadFileName;
>>>>    }
>>>>
>>>>
>>>>    public void setUploadFileName(String uploadFileName) {
>>>>        this.uploadFileName = uploadFileName;
>>>>    }
>>>>
>>>> }
>>>>
>>>>
>>>>
>>>>
>>>> Dave Newton escribió:
>>>>
>>>>   
>>>>> --- Pablo Vázquez Blázquez <pvazquez@denodo.com> wrote:
>>>>>
>>>>>     
>>>>>> I send you my struts-config.xml file, but it works ok. If I 
>>>>>> delete my
>>>>>> "s:file" from my form, everything works fine.
>>>>>>
>>>>>>         
>>>>> The error happens after you submit, correct?
>>>>>
>>>>> I guess I'd want to see the JSP and the action code, then; the
>>>>>       
>>>> configuration
>>>>   
>>>>> seems okay.
>>>>>
>>>>> Have you tried it without setting the "struts.multipart.parser"
>>>>>       
>>>> constant? The
>>>>   
>>>>> default value of that is "jakarta", not a classname; it's worth a 
>>>>> shot,
>>>>> anyway.
>>>>>
>>>>> d.
>>>>>
>>>>>
>>>>>     
>>>>>> To see the action involved search:  <!-- HERE IS THE PROBLEM -->
>>>>>>
>>>>>>
>>>>>> <?xml version="1.0" encoding="UTF-8" ?>
>>>>>> <!DOCTYPE struts PUBLIC
>>>>>>     "-//Apache Software Foundation//DTD Struts Configuration 
>>>>>> 2.0//EN"
>>>>>>     "http://struts.apache.org/dtds/struts-2.0.dtd">
>>>>>>
>>>>>> <struts>
>>>>>>
>>>>>>     <constant name="struts.enable.DynamicMethodInvocation"
>>>>>>         
>>>> value="false" />
>>>>   
>>>>>>     <constant name="struts.devMode" value="true" /> <!--
TODO: 
>>>>>> cambiar
>>>>>>         
>>>> a
>>>>   
>>>>>> false en produccion -->
>>>>>>     <constant name="struts.action.extension" value="do"/>
>>>>>>     <constant name="struts.ui.theme" value="simple"/>
>>>>>>     <constant name="struts.multipart.parser"
>>>>>>
>>>>>> value="org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest

>>>>>>
>>>>>>         
>>>> "/>
>>>>   
>>>>>>     <!-- Internacionalizacion para los tags de struts 2 -->
>>>>>>     <constant name="struts.custom.i18n.resources"
>>>>>>         value="admintool.http.view.messages.Messages"/>
>>>>>>
>>>>>>     <include file="struts-default.xml"/>
>>>>>>
>>>>>>     <!-- ===== Paquetes ===== -->
>>>>>>     <package name="scheduler" extends="struts-default">
>>>>>>
>>>>>>         <!-- ===== Resultados globales ===== -->
>>>>>>         <result-types>
>>>>>>             <result-type name="tiles"
>>>>>>                 class="org.apache.struts2.views.tiles.TilesResult"/>
>>>>>>         </result-types>
>>>>>>
>>>>>>         <!-- ===== Interceptors ===== -->
>>>>>>         <interceptors>
>>>>>>
>>>>>>             <interceptor name="session"
>>>>>>
>>>>>> class="admintool.http.controller.interceptors.SessionInterceptor"
/>
>>>>>>
>>>>>>             <interceptor name="login"
>>>>>>
>>>>>> class="admintool.http.controller.interceptors.AuthenticationInterceptor"

>>>>>>
>>>>>>         
>>>> />
>>>>   
>>>>>>             <interceptor-stack name="defaultLoginStack">
>>>>>>                 <interceptor-ref name="exception" />
>>>>>>                 <interceptor-ref name="alias" />
>>>>>>                 <interceptor-ref name="servlet-config" />
>>>>>>                 <interceptor-ref name="session" />
>>>>>>                 <interceptor-ref name="login" />
>>>>>>                 <interceptor-ref name="prepare" />
>>>>>>                 <interceptor-ref name="i18n"/>
>>>>>>                 <interceptor-ref name="chain" />
>>>>>>                 <interceptor-ref name="model-driven" />
>>>>>>                 <interceptor-ref name="fileUpload" />
>>>>>>                 <interceptor-ref name="static-params" />
>>>>>>                 <interceptor-ref name="params" />
>>>>>>                 <interceptor-ref name="conversionError" />
>>>>>>                 <interceptor-ref name="validation" />
>>>>>>                 <interceptor-ref name="workflow" />
>>>>>>             </interceptor-stack>
>>>>>>
>>>>>>             <interceptor-stack name="defaultInsecureStack">
>>>>>>                 <interceptor-ref name="exception" />
>>>>>>                 <interceptor-ref name="alias" />
>>>>>>                 <interceptor-ref name="servlet-config" />
>>>>>>                 <interceptor-ref name="session" />
>>>>>>                 <interceptor-ref name="prepare" />
>>>>>>                 <interceptor-ref name="i18n"/>
>>>>>>                 <interceptor-ref name="chain" />
>>>>>>                 <interceptor-ref name="model-driven" />
>>>>>>                 <interceptor-ref name="fileUpload" />
>>>>>>                 <interceptor-ref name="static-params" />
>>>>>>                 <interceptor-ref name="params" />
>>>>>>                 <interceptor-ref name="conversionError" />
>>>>>>                 <interceptor-ref name="validation" />
>>>>>>                 <interceptor-ref name="workflow" />
>>>>>>             </interceptor-stack>
>>>>>>
>>>>>>             <!-- Sample file upload stack -->
>>>>>>             <interceptor-stack name="fileUploadStack">
>>>>>>                 <interceptor-ref name="fileUpload"/>
>>>>>>                 <interceptor-ref name="basicStack"/>
>>>>>>             </interceptor-stack>
>>>>>>
>>>>>>         </interceptors>
>>>>>>
>>>>>>         <!--
>>>>>>             Make the defaultLoginStack the default one used
>>>>>>             for all actions unless otherwise configured.
>>>>>>         -->
>>>>>>         <default-interceptor-ref name="defaultLoginStack" />
>>>>>>
>>>>>>         <!-- ===== Resultados globales ===== -->
>>>>>>         <!-- se corresponden con los valores por defecto 
>>>>>> devueltos por
>>>>>> Action (ej: error, login) -->
>>>>>>         <global-results>
>>>>>>             <result name="login"
>>>>>> type="redirect-action">ShowAuthentication</result>
>>>>>>             <result name="MainPage"
>>>>>> type="redirect-action">Workspace</result>
>>>>>>             <result
>>>>>> name="error">/HTML/tiles/base/InternalError.jspx</result>
>>>>>>             <result
>>>>>>         
>>>> name="exito">/HTML/tiles/base/SuccessPage.jspx</result>
>>>>   
>>>>>>         </global-results>
>>>>>>
>>>>>>         <!-- ===== Secciones principales ===== -->
>>>>>>         <action name="Workspace">
>>>>>>             <result type="tiles">.Workspace</result>
>>>>>>         </action>
>>>>>>
>>>>>>         <action name="Scheduler">
>>>>>>             <result type="tiles">.Scheduler</result>
>>>>>>         </action>
>>>>>>
>>>>>>         <action name="Configuration">
>>>>>>             <result type="tiles">.Configuration</result>
>>>>>>         </action>
>>>>>>
>>>>>>         <!-- ===== Autenticacion ===== -->
>>>>>>         <!-- Accion que muestra el formulario de autenticacion
-->
>>>>>>         <action name="ShowAuthentication"
>>>>>>
>>>>>> class="admintool.http.controller.actions.users.ShowAuthenticationAction

>>>>>>
>>>>>>         
>>>> ">
>>>>   
>>>>>>             <interceptor-ref name="defaultInsecureStack"/>
>>>>>>             <result type="tiles">.Login</result>
>>>>>>         </action>
>>>>>>
>>>>>>         <!-- Ejecuta la accion de login. Si hay fallos, vuelve
a la
>>>>>> misma pagina -->
>>>>>>         <action name="Login"
>>>>>>
>>>>>> class="admintool.http.controller.actions.users.LoginAction">
>>>>>>             <interceptor-ref name="defaultInsecureStack"/>
>>>>>>             <result name="input" type="tiles">.Login</result>
>>>>>>         </action>
>>>>>>
>>>>>>         <!-- Cierra la sesion y vuelve a la pagina de login  -->
>>>>>>         <action name="Logout"
>>>>>>
>>>>>> class="admintool.http.controller.actions.users.LogoutAction">
>>>>>>             <interceptor-ref name="defaultInsecureStack"/>
>>>>>>         </action>
>>>>>>
>>>>>>         <!-- ===== Configuration ===== -->
>>>>>>
>>>>>>         <action name="CancelConfiguration">
>>>>>>
>>>>>>         
>>>> <result>/HTML/tiles/configuration/ConnectionInfo.jspx</result>
>>>>   
>>>>>>         </action>
>>>>>>
>>>>>>         <action name="ShowChangePassword">
>>>>>>
>>>>>>         
>>>> <result>/HTML/tiles/configuration/ChangePassword.jspx</result>
>>>>   
>>>>>>         </action>
>>>>>>
>>>>>>         <action name="ChangePassword"
>>>>>>
>>>>>>
>>>>>>
>>>>>>         
>>>>> class="
>>>>>       
>>>> admintool.http.controller.actions.configuration.ChangePasswordAction">
>>>>   
>>>>>>             <result
>>>>>> name="input">/HTML/tiles/configuration/ChangePassword.jspx</result>
>>>>>>         </action>
>>>>>>
>>>>>>         <action name="ShowChangeServer">
>>>>>>
>>>>>>         
>>>> <result>/HTML/tiles/configuration/ChangeServer.jspx</result>
>>>>   
>>>>>>         </action>
>>>>>>
>>>>>>         <action name="ChangeServer"
>>>>>>
>>>>>> class="
>>>>>>         
>>>> admintool.http.controller.actions.configuration.ChangeServerAction">
>>>>   
>>>>>>             <result
>>>>>> name="input">/HTML/tiles/configuration/ChangeServer.jspx</result>
>>>>>>         </action>
>>>>>>
>>>>>>         <action name="ShowChangeRemotePort">
>>>>>>
>>>>>> <result>/HTML/tiles/configuration/ChangeRemotePort.jspx</result>
>>>>>>         </action>
>>>>>>
>>>>>>         <action name="ChangeRemotePort"
>>>>>>
>>>>>>
>>>>>>
>>>>>>         
>>>>> class="
>>>>>       
>>>> admintool.http.controller.actions.configuration.ChangeRemotePortAction">

>>>>
>>>>   
>>>>>>             <result
>>>>>> name="input">/HTML/tiles/configuration/ChangeRemotePort.jspx</result>

>>>>>>
>>>>>>         </action>
>>>>>>
>>>>>>         <action name="ShowChangeMail">
>>>>>>             
>>>>>> <result>/HTML/tiles/configuration/ChangeMail.jspx</result>
>>>>>>         </action>
>>>>>>
>>>>>>         <action name="ChangeMail"
>>>>>>
>>>>>> class="admintool.http.controller.actions.configuration.ChangeMailAction

>>>>>>
>>>>>>         
>>>> ">
>>>>   
>>>>>>             <result
>>>>>> name="input">/HTML/tiles/configuration/ChangeMail.jspx</result>
>>>>>>         </action>
>>>>>>
>>>>>>         <action name="ShowChangeThreads">
>>>>>>
>>>>>>
>>>>>>         
>>>>> === message truncated ===
>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>>> For additional commands, e-mail: user-help@struts.apache.org
>>>>>
>>>>>
>>>>>       
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>> For additional commands, e-mail: user-help@struts.apache.org
>>>>
>>>>
>>>>     
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>> For additional commands, e-mail: user-help@struts.apache.org
>>
>>
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Mime
View raw message