【发布时间】:2013-02-01 11:21:20
【问题描述】:
我有一组托管在服务器上的网络服务。
我使用轴生成 web 服务的类和存根(java org.apache.axis.wsdl.WSDL2Java http://whatever1?wsdl, java org.apache.axis.wsdl.WSDL2Java http://whatever2?wsdl 等)
这会生成很多我从中创建 jar 文件的类。
对于一个特定的项目,我必须创建一个包装类,它使用 jar 中的不同类来执行 3 个任务。这是为了抽象出 jar 中的所有不同类并呈现 1 个类,您可以在该类上调用 3 个不同的方法来实现 3 个不同的任务。
我已经完成了包装类的编码,但是对于如何处理从 web 服务客户端 jar 文件中抛出的异常,我感到很困惑。
其中一个要求是我的包装器的客户端永远不需要知道原始 Web 服务客户端 jar 中的任何类。因此,除了我的包装 jar 之外,我还需要创建更多的异常类。
在 webservice 客户端 jar 中,有 3-4 种不同类型的用户定义异常类,所有这些类都派生自 WSException,而 WSException 又派生自 org.apache.axis.AxisFault(这是因为我使用轴生成客户端罐子)。
现在,我正试图弄清楚如何最好地设计我的异常类——这样调用我的包装器的代码就不会丢失直接调用 Web 服务客户端时可能获得的任何信息。
由于我的包装器中有 3 个方法(例如 m1、m2、m3)来执行三个不同的任务,我想我会有 3 个异常类(m1exc、m2exc、m3exc)。
这是一个示例异常类
public class m1exc
{
WSException ws;
public m1exc(WSException e)
{
ws = e;
}
public String toString()
{
return ws.toString();
}
// Returns the error code
public int getCode()
{
return ws.getCode();
}
}
在我的包装中,我会有
class Wrap
{
void m1() throws m1exc, javax.xml.rpc.ServiceException, java.rmi.RemoteException
{
try
{
// call stuff from the webservice client jar to get things done
}
catch(WSException w)
{
throw new m1exc(w);
}
}
}
在包装代码中,我会尝试捕获块,在那里我会捕获 WSException 并让其他所有内容都通过。
这听起来像是正确的策略吗?有没有更好的方法来做到这一点 - 主要标准是调用我的包装器的代码不应该丢失任何异常信息。是否有为此目的的标准设计?
【问题讨论】:
标签: java web-services exception axis