2015-10-23 2 views
1

В настоящее время я работаю с zkoss, java и maven. Одна из функций в моих приложениях - загрузка файла.Изменить сообщение об ошибке из библиотеки Java

Когда я сделал некоторые испытания относительно этой функциональности путем загрузки очень большой файл, я получил незамедлительное сообщение об ошибке, в котором говорилось «запрос был отклонен, поскольку его размер (8356577) превышает установленное максимальное (1024000)»

После того, как я сделал несколько отладок, я узнал, что приглашение получено из org.apache.commons.fileupload.FileUploadBase, который является файлом из одной из моих зависимостей maven.

Теперь я хотел бы изменить сообщение об ошибке во что-то другое. Есть ли решение о том, как это сделать? Я предпочитаю путь без перекомпиляции библиотеки. Большое спасибо.

- ОБНОВЛЕНО -

Вот мой web.xml. Я сделал что-то не так? Еще раз спасибо.

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    id="WebApp_ID" version="2.5"> 
    <display-name>Sistem Informasi Jabatan Fungsional</display-name> 

    <context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     classpath:spring-ctx.xml 
    </param-value> 
    </context-param> 

    <context-param> 
    <param-name>log4jConfigLocation</param-name> 
    <param-value>classpath:log4j.properties</param-value> 
    </context-param> 


    <session-config> 
    <session-timeout>15</session-timeout> <!-- in minutes --> 
    </session-config> 


    <listener> 
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
    </listener> 


    <listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <!-- For using session scoped bean --> 
    <listener> 
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 
    </listener> 

    <listener> 
    <listener-class>org.zkoss.zk.ui.http.HttpSessionListener</listener-class> 
    </listener> 

    <servlet> 
    <servlet-name>uploader</servlet-name> 
    <servlet-class>org.zkoss.zk.au.http.DHtmlUpdateServlet</servlet-class> 
    <init-param> 
     <param-name>extention0</param-name> 
     <param-value>/upload=uploader.UploadUtil</param-value> 
    </init-param> 
    </servlet> 

    <servlet> 
    <servlet-name>zkLoader</servlet-name> 
    <servlet-class>org.zkoss.zk.ui.http.DHtmlLayoutServlet</servlet-class> 
    <!-- Must. Specifies URI of the update engine (DHtmlUpdateServlet). It must be the same as <url-pattern> 
     for the update engine. --> 
    <init-param> 
     <param-name>update-uri</param-name> 
     <param-value>/zkau</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup><!-- MUST --> 
    </servlet> 
    <servlet> 
    <servlet-name>auEngine</servlet-name> 
    <servlet-class>org.zkoss.zk.au.http.DHtmlUpdateServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>zkLoader</servlet-name> 
    <url-pattern>*.zul</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
    <servlet-name>zkLoader</servlet-name> 
    <url-pattern>*.zhtml</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
    <servlet-name>auEngine</servlet-name> 
    <url-pattern>/zkau/*</url-pattern> 
    </servlet-mapping> 
    <!-- Spring Security Filter Start Here --> 
    <filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    </filter> 
    <filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    <!-- Spring Security Filter End Here --> 

    <welcome-file-list> 
    <welcome-file>index.zul</welcome-file> 
    </welcome-file-list> 
</web-app> 

ответ

0

Вы можете простираться от org.zkoss.zk.au.http.AuUploader и переопределить метод handleError(Throwable):

public class MyUploader extends AuUploader { 
    @Override 
    protected String handleError(Throwable ex) 
    { 
     return "mymessage"; 
    }   
} 

Затем вы должны настроить это расширение, в вашем web.xml:

В конфигурации

<servlet> 
    <servlet-class>org.zkoss.zk.au.http.DHtmlUpdateServlet</servlet-class> 
    <!-- extentions here --> 
</servlet> 

добавить:

<init-param>    
    <param-name>processor0</param-name>    
    <param-value>/upload=uploader.MyUploader</param-value> 
</init-param> 

Может быть processor0 необходимо изменить на extention0, в зависимости от вашей версии ZK. processor0 был испытуемым, работающим с ZK 7.

Документацию ZK по этому вопросу можно найти here.

+0

Привет, спасибо за ваш ответ. Во-первых, к чему относится «загрузчик» в ? И затем, я обновил свои вопросы и добавлю свою конфигурацию web.xml. Не могли бы вы посмотреть, не сделал ли я что-то не так с конфигурацией? Я пробовал ваше решение, но метод handleError по-прежнему не переопределяется. Спасибо, куча: D – anonym

+0

Вы дважды определили сервлет 'DHtmlUpdateServlet' (и ваш собственный не привязан к определенному URL). Вы должны добавить '' в существующий сервлет с именем 'auEngine'. Я добавил ссылку на соответствующую ZK-спецификацию в своем ответе. – flo

+0

благодарит за вашу помощь: D – anonym

Смежные вопросы