0

私のInvocationTargetExceptionは、printStackTraceを実行したときに次のように出力します。

AxisFault
 faultCode:file.could.not.be.created
 faultSubcode:
 faultString:ファイルを作成できませんでした
 faultActor:
 faultNode:
 faultDetail:
    {http://schemas.xmlsoap.org/soap/envelope/}Fault:file.already.existsFileはすでに存在します

ファイルを作成できませんでした
    org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)で
    org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)で
    org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)で
    org.apache.xerces.parsers.AbstractSAXParser.endElement(不明なソース)で

InvocationTargetExceptionからfaultcodeとfaultStringを取得したい:file.already.existsファイルはすでに存在します

これどうやってするの??

4

1 に答える 1

1

スタックトレースがこのように見え、実際の InvocationFailureException のトレースが含まれていない理由はわかりませんが、AxisFault が InvocationFailureException に直接ラップされていると仮定し、ラップを解除すると役立つ場合があります。たとえば、次のようになります。

    try {
         // here code which throws InvocationFailureException
    } catch (InvocationFailureException e) {
        Throwable rootCause = e.getRootCause();
        if (rootCause instanceof AxisFault) {
            AxisFault axFault = (AxisFault)rootCause;
            // now extract information, e.g. 
            axFault.getFaultDetails();
        }
    }

直接ラップされていない場合は、根本原因を再帰的に取得する必要さえあるかもしれません。

于 2013-02-04T18:28:03.327 に答える