Alexander Garmash
Alexander Garmash

Reputation: 41

Handling Exception custom in JAX-WS

I have web service, developed using JAX-WS. Now i wanted to throw SOAPFault with customized error codes on certain conditions.

I have a webfault:

@WebFault(name = "BankExceptionFault1_Fault", targetNamespace = NS.namespace)

public class BankException extends Exception {

private WebMethodStatus faultInfo;


public BankException(Errors error) {
    this(error, error.name());
}

public WebMethodStatus getFaultInfo() {
    return faultInfo;
}

public BankException(Errors error, String description) {
    super(error.getErrorCode());
    this.faultInfo = new WebMethodStatus(error, description);
}

}

And In some method, for a given condition, throws exception:

@Override
@WebMethod(operationName = "UpdateAccountRecord")
@WebResult(name = "Result")
@LogExecution
public WebMethodStatus updateAccountRecord(
        @WebParam(name = "Request") UpdateAccountRequest request) throws BankException {
    if (!Boolean.parseBoolean(specialMode)) {
        throw new BankException(Errors.INVALID_RUNNING_MODE,
                "Can't update account record. For updating need special running mode");
    }
    service.updateAccountRecord(request);
    return new WebMethodSuccessStatus();
}

In spring-mvc app, I want to catch my exception:

try {
        wsPort.updateAccountRecord(updateAccountRequest);
    } catch (BankException e) {
        throwException(e);
    }
    catch(RemoteAccessException e){
        throwException(e);
    }

But always return RemoteAccessException, if try to update account using sring-mvc app. detailMessage:Could not access remote service at [http://localhost:8080/my-app-2.1.1-SNAPSHOT/app/MyApp] cause: java.lang.IllegalStateException: Current event not START_ELEMENT or END_ELEMENT

But if I use soapui for update account, returns correct exception:

BNK00017 Can't update account record. For updating need special running mode

Upvotes: 2

Views: 1298

Answers (1)

kschneid
kschneid

Reputation: 5694

If wsPort is something like an injected JaxWsPortProxyFactoryBean, then it's likely that your exception is being wrapped by RemoteAccessException. Try using RemoteAccessException.getCause() and see what you get...

Upvotes: 1

Related Questions