如何使我的Java Servlet类处理SAXException';s
编译Java Servlet代码时,出现以下错误如何使我的Java Servlet类处理SAXException';s,java,xml,Java,Xml,编译Java Servlet代码时,出现以下错误 in javax.servlet.http.HttpServlet; overridden method does not throw org.xml.sax.SAXException 在我重写的doGet()函数中,我使用JAXP处理XML,这显然需要我处理SAXP异常。但是当我将“SAXExeption”添加到我希望doGet函数处理的异常类型列表中时,我得到了上面的错误。如何让我的doGet函数挂起萨克斯管 提前感谢您的帮助 不能声明一个
in javax.servlet.http.HttpServlet; overridden method does not throw org.xml.sax.SAXException
在我重写的doGet()函数中,我使用JAXP处理XML,这显然需要我处理SAXP异常。但是当我将“SAXExeption”添加到我希望doGet函数处理的异常类型列表中时,我得到了上面的错误。如何让我的doGet函数挂起萨克斯管
提前感谢您的帮助 不能声明一个重写方法,该方法会抛出被重写的方法未抛出的已检查异常。换句话说,由于HttpServlet.doGet()被声明为抛出IOException和ServletException,因此在doGet方法的throws子句中不能使用任何其他异常类型 但是,您可以将获得的SAXException打包为ServletException,以解决以下问题:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException {
try {
JAXP.possiblyThrowASAXException();
} catch (SAXException e) {
throw new ServletException("JAXP had a parsing failure", e);
}
}
您不能声明一个重写方法,该方法会引发被重写的方法不会引发的已检查异常。换句话说,由于HttpServlet.doGet()被声明为抛出IOException和ServletException,因此在doGet方法的throws子句中不能使用任何其他异常类型 但是,您可以将获得的SAXException打包为ServletException,以解决以下问题:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException {
try {
JAXP.possiblyThrowASAXException();
} catch (SAXException e) {
throw new ServletException("JAXP had a parsing failure", e);
}
}
我同意大卫·温斯洛的回答 当您在HttpServlet的doGet方法中抛出异常时,您实际上是在举手并放弃任何合理的错误处理 捕获SAXException并发出一个提供有用信息的错误可能是更好的方法 客户机是否在get(即XML)中向您发送信息?如果是这样的话,您可能应该以一个合理的错误作为响应,告诉他们他们的XML不正确
此错误是由服务器端加载的内容引起的吗?如果是,则get存在一个基本问题,用户应该得到相应的消息。我同意@David Winslow的回答 当您在HttpServlet的doGet方法中抛出异常时,您实际上是在举手并放弃任何合理的错误处理 捕获SAXException并发出一个提供有用信息的错误可能是更好的方法 客户机是否在get(即XML)中向您发送信息?如果是这样的话,您可能应该以一个合理的错误作为响应,告诉他们他们的XML不正确
此错误是由服务器端加载的内容引起的吗?如果是这样,那么get就有一个基本问题,用户应该得到相应的消息。当父类声明抛出一个选中的异常时,子类必须抛出至少相同的选中的异常,以满足父类的约定。另一方面,子类方法不必声明为引发任何异常,但不能声明为引发父类方法未声明为引发的已检查异常 为了说明这一点,让我们假设您有以下类:
package test;
import java.io.IOException;
public class Parent {
void foo() throws IOException {
throw new IOException();
}
}
这将汇编:
package test;
class Child1 extends Parent {
void foo() {
}
}
但这不会:
package test;
import org.xml.sax.SAXException;
class Child2 extends Parent
{
void foo() throws SAXException {
throw new SAXException();
}
}
javac
编译器将生成以下输出:
test/Child2.java:6: foo() in test.Child2 cannot override foo() in test.Parent; overridden method does not throw org.xml.sax.SAXException
void foo() throws SAXException {
^
1 error
换句话说,你不能这样写:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException, SAXException {
super.doGet(req, resp);
...
}
如果要重新播放,必须在doGet()
方法中处理SAXException
,并将其包装在ServletException
中
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.doGet(req, resp);
try {
// code that possibly throws a SAXException
...
} catch (SAXException e) {
// handle it or rethrow it as ServletException
...
}
}
当父类声明抛出已检查异常时,子类必须至少抛出相同的已检查异常以满足父类的约定。另一方面,子类方法不必声明为引发任何异常,但不能声明为引发父类方法未声明为引发的已检查异常 为了说明这一点,让我们假设您有以下类:
package test;
import java.io.IOException;
public class Parent {
void foo() throws IOException {
throw new IOException();
}
}
这将汇编:
package test;
class Child1 extends Parent {
void foo() {
}
}
但这不会:
package test;
import org.xml.sax.SAXException;
class Child2 extends Parent
{
void foo() throws SAXException {
throw new SAXException();
}
}
javac
编译器将生成以下输出:
test/Child2.java:6: foo() in test.Child2 cannot override foo() in test.Parent; overridden method does not throw org.xml.sax.SAXException
void foo() throws SAXException {
^
1 error
换句话说,你不能这样写:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException, SAXException {
super.doGet(req, resp);
...
}
如果要重新播放,必须在doGet()
方法中处理SAXException
,并将其包装在ServletException
中
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.doGet(req, resp);
try {
// code that possibly throws a SAXException
...
} catch (SAXException e) {
// handle it or rethrow it as ServletException
...
}
}
这是对我所说的更好的解释。