我有一组托管在服务器上的网络服务。
我使用轴为 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 中的任何类。所以除了我的包装罐之外,我还需要创建更多的异常类。
在 webservice 客户端 jar 中有 3-4 种不同类型的用户定义的异常类,所有这些类都派生自WSException
这些类,而这些类又派生自org.apache.axis.AxisFault
(这是因为我使用了轴来生成客户端 jar)。
现在,我试图弄清楚如何最好地设计我的异常类——这样调用我的包装器的代码就不会丢失直接调用 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
让其他所有内容通过。
这听起来像是正确的策略吗?有没有更好的方法来做到这一点 - 主要标准是调用我的包装器的代码不应该丢失任何异常信息。是否有为此目的的标准设计?