Допустим делаю веб сервис на AXIS2 (только потому, что supports SOAP 1.1 and SOAP 1.2), необходимо реализовать передачу информации о ошибках на строне сервиса, в примере ( faulthandling) у AXIS2 видел что можно возбуждать исключения на сервисе и ловить их на клиенте код сервиса| Код | package example; /** * BankServiceSkeleton java skeleton for the axisService */ public class BankServiceSkeleton{
/**
* @param param0
*/ public example.WithdrawResponse withdraw(example.Withdraw param0) throws InsufficientFundFaultMessageException,AccountNotExistFaultMessageException{ final String account = param0.getAccount(); if (account.equals("13")) { final AccountNotExistFault fault = new AccountNotExistFault(); fault.setAccount(account); AccountNotExistFaultMessageException messageException = new AccountNotExistFaultMessageException("Account does not exist!"); messageException.setFaultMessage(fault); throw messageException; }
final int amount = param0.getAmount(); if (amount > 1000) { final InsufficientFundFault fault = new InsufficientFundFault(); fault.setAccount(account); fault.setBalance(1000); fault.setRequestedFund(amount); InsufficientFundFaultMessageException messageException = new InsufficientFundFaultMessageException("Insufficient funds"); messageException.setFaultMessage(fault); throw messageException; }
final WithdrawResponse response = new WithdrawResponse(); response.setBalance(1000 - amount); return response; }
}
|
код клиента| Код | package example;
import java.rmi.RemoteException;
public final class BankClient {
/** * If account# == "13", then you will get a AccountNotExistFault. * otherwise if you provide an amount > 1000, you will get a InsufficientFundFaultMessageException, * otherwise you will get a response with a balance equal to 1000 - amountWithdrawn. */ public static void main(String[] args) {
if (args.length != 3) { System.err.println("Usage: BankClient -Durl=<url> -Daccount=<account> -Damt=<amount>"); return; } final String url = args[0]; final String account = args[1]; final Integer withdrawalAmount = new Integer(args[2]); System.out.println(); System.out.println("Withdrawing " + withdrawalAmount + " dollars from account#" + account); try { final BankService bankService = new BankServiceStub(url); final Withdraw withdrawRequest = new Withdraw(); withdrawRequest.setAccount(account); withdrawRequest.setAmount(withdrawalAmount.intValue()); final WithdrawResponse withdrawResponse = bankService.withdraw(withdrawRequest); System.out.println("Balance = " + withdrawResponse.getBalance()); } catch (AccountNotExistFaultMessageException e) { final AccountNotExistFault fault = e.getFaultMessage(); System.out.println("Account#" + fault.getAccount() + " does not exist"); } catch (InsufficientFundFaultMessageException e) { final InsufficientFundFault fault = e.getFaultMessage(); System.out.println("Account#" + fault.getAccount() + " has balance of " + fault.getBalance() + ". It cannot support withdrawal of " + fault.getRequestedFund()); } catch (RemoteException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }
|
Это соответствует спецификации SOAP? или Могут ли к такому сервису писаться клиентские приложения на С++, С? Необходимо ли использовать какие-то дополнительные либы?
|