我有一套set服务,托管在一台服务器上。
我使用axis为for服务(java org.apache.axis.wsdl.WSDL2Java http://whatever1?wsdl, java org.apache.axis.wsdl.WSDL2Java http://whatever2?wsdl等)生成类和存根。
这将生成许多类,我将从中创建一个jar文件。
对于一个特定的项目,我必须创建一个包装器类,它使用jar中的不同类来执行3个任务。这是为了抽象出jar中所有不同的类&提供一个类,您可以在其中调用3个不同的方法来实现3个不同的任务)。
我已经完成了包装器类的编码,但是对于如何处理从jar服务客户端jar文件抛出的异常,我感到非常困惑。
其中一个要求是,我的包装器的客户端永远不需要知道原始any服务客户端jar中的任何类。所以除了我的包装器jar之外,我还需要创建更多的异常类。
在webservice客户端jar中,有3-4种不同类型的用户定义的异常类,所有这些异常类都派生自WSException,而后者又派生自org.apache.axis.AxisFault (这是因为我使用axis来生成客户端jar)。
现在,我正在试图弄清楚如何最好地设计我的异常类-这样调用我的包装器的代码就不会丢失任何它可以获得的信息,如果它是直接调用webservice客户端的话。
因为我的包装器中有3个方法(比如m1、m2、m3)来执行3个不同的任务,所以我想我应该有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);
}
}
}在包装器代码中,我会尝试使用catch块来捕获WSException &让其他所有东西都通过。
这听起来像是正确的策略吗?有没有更好的方法来做到这一点-主要的标准是调用我的包装器的代码不应该丢失任何异常信息。是否有用于此目的的标准设计?
发布于 2013-02-01 22:00:37
您不会对客户端隐藏WSException类,我相信这正是您要实现的目标。
相反,让您的m1exc类接受code和toString作为您从WSException传递的参数。您可以从WSException类中添加任何其他您喜欢的字段。
为了确保m1exc是由WSExceptions创建的,而不是程序员想要的任何值,您可以创建一个接受WSException并生成m1exc的m1exc工厂。工厂和m1exc应该在同一个包中,m1exc类的构造函数上没有访问修饰符(public),这使得m1exc构造函数只能在包中访问。
public class m1excFactory {
public static m1exc createM1Exc(WSExcetion e){
return new m1exc(e.toString(), e.getCode());
}
}
public class m1exc{
String message;
int code;
m1exc(String message, int code)
{
this.message = message;
this.code = code;
}
public String toString()
{
return message;
}
// Returns the error code
public int getCode()
{
return code;
}
}https://stackoverflow.com/questions/14645191
复制相似问题