Korzystanie z usługi Web Service SOAP

Aplikacja kliencka może wywoływać zestaw reguł usługi decyzyjnej jako usługę Web Service SOAP.

Zanim rozpoczniesz

Aplikacja kliencka musi przekazać referencje uwierzytelniania dla portalu w chmurze (patrz sekcja Uwierzytelnianie dla usługi REST i wywołanie SOAP).

Uwaga: Operational Decision Manager on Cloud obsługuje SOAP 1.1. Nie obsługuje on późniejszych wersji protokołu SOAP.

O tym zadaniu

Aby aplikacja kliencka wywoływała zestaw reguł usługi decyzyjnej jako usługę Web Service SOAP, należy utworzyć klasy proxy z pliku WSDL (Web Services Description Language) wygenerowanego dla ścieżki do zestawu reguł. Format pliku WSDL jest niezależny od języka, który go generuje.

Procedura

  1. Uzyskaj plik WDSL dla zestawu reguł usługi decyzyjnej.
  2. Generuj klasy proxy z pliku WSDL.
  3. Użyj klas proxy, aby wywołać zestaw reguł z aplikacji klienckiej.

Przykład

Aby pobrać plik WSDL z serwera Rule Execution Server:
  1. Wdróż zestaw reguł na serwerze Rule Execution Server.
  2. W konsoli Serwer Rule Execution Server przejdź do karty Eksplorator .
  3. W panelu Navigator kliknij pozycję RuleApp, a następnie kliknij zestaw reguł, który odpowiada usłudze decyzyjnej.
  4. W obszarze Widok zestawu regułkliknij opcję Pobierz plik opisu obiektu HTDS.
  5. Jako typ protokołu serwisowego wybierz SOAP .
  6. Zaznacz opcję Najnowsza wersja zestawu reguł i Najnowsza wersja RuleApp , aby wygenerować plik WSDL dla najnowszych wersji.
  7. Kliknij przycisk Pobierz.
W przypadku tej procedury na komputerze musi być zainstalowany produkt Eclipse IDE for Java™ EE Developers. Zawiera ona platformę narzędzi WWW do generowania klas proxy na potrzeby wywoływania usługi Web Service z poziomu aplikacji Java. Aby wygenerować klasy proxy dla osi Apache :
  1. Uruchom środowisko Eclipse IDE for Java EE Developers i utwórz nowy projekt Java ( Plik > Nowy > Projekt Java), aby udostępniać klasy proxy.
  2. Skopiuj plik WSDL do tego projektu Java.
  3. Kliknij opcję Plik > Nowy > Inne > Usługi Web Services > Klient usługi Web Service.
  4. W kreatorze Klient usługi Web Service kliknij przycisk Dalej.
  5. W przypadku definicji usługi przejdź do pliku WSDL.
  6. Przesuń suwak, aby wybrać opcję Utwórz klienta.
  7. W obszarze Configuration(Konfiguracja) upewnij się, że jako środowisko wykonawcze usługi Web Service wybrano Apache Axis , a następnie wybierz projekt Java jako projekt klienta, w którym mają być generowane wygenerowane klasy proxy.
  8. Kliknij przycisk Zakończ.
Następujący przykładowy kod Java importuje klasy proxy dla produktu MiniloanServiceRuleset i wywołuje zestaw reguł z aplikacji Java:
import com.ibm.www.rules.decisionservice.MiniloanService.MiniloanServiceRuleset.MiniloanServiceMiniloanServiceRulesetBindingStub;
import com.ibm.www.rules.decisionservice.MiniloanService.MiniloanServiceRuleset.MiniloanServiceRulesetDecisionServiceProxy;
import com.ibm.www.rules.decisionservice.MiniloanService.MiniloanServiceRuleset.MiniloanServiceRulesetRequest;
import com.ibm.www.rules.decisionservice.MiniloanService.MiniloanServiceRuleset.MiniloanServiceRulesetResponse;
import com.ibm.www.rules.decisionservice.MiniloanService.MiniloanServiceRuleset.param.Borrower;
import com.ibm.www.rules.decisionservice.MiniloanService.MiniloanServiceRuleset.param.Loan;


public class DecisionServiceExecution {

	public static void main(String[] args) {
		
		// Replace <vhostname> with the name of the host of the Cloud portal
		// NB: endpointURI is defined in the location attribute of the WDSL file
		String endpointURI = "https://<vhostname>.bpm.ibmcloud.com/odm/dev/DecisionService/ws/MiniloanService/MiniloanServiceRuleset/v75";

		MiniloanServiceRulesetDecisionServiceProxy proxy = new MiniloanServiceRulesetDecisionServiceProxy(endpointURI);
		
		MiniloanServiceMiniloanServiceRulesetBindingStub stub = (MiniloanServiceMiniloanServiceRulesetBindingStub)proxy.getMiniloanServiceRulesetDecisionService_PortType();
	
		// Replace "loginID" with the functional ID of the service account you are using to authenticate with your tenant in the Cloud
		stub.setUsername("loginID");
		
		// Replace "password" with the password of the service account you are using to authenticate with your tenant in the Cloud
		stub.setPassword("password");
		
		// Set the borrower
		com.ibm.www.rules.decisionservice.MiniloanService.MiniloanServiceRuleset.Borrower borrower = 
				new com.ibm.www.rules.decisionservice.MiniloanService.MiniloanServiceRuleset.Borrower(
						"John", // name
						600, // credit score
						80000); // yearlyIncome
		
		Borrower borrowerParam = new Borrower(borrower);
		
		// Set the loan
		com.ibm.www.rules.decisionservice.MiniloanService.MiniloanServiceRuleset.Loan loan = 
				new com.ibm.www.rules.decisionservice.MiniloanService.MiniloanServiceRuleset.Loan(
						500000, // amount
						240, // duration
						0.05, // yearlyInterestRate
						0, // yearlyRepayment (to be computed by the decision service)
						true, // approved (set to true by default, to be computed by the decision engine),
						null); // messages (to be computed by the decision service)
		
		Loan loanParam = new Loan(loan);
		
		// Set the decision ID
		String decisionID = "1";
				
		MiniloanServiceRulesetRequest request = new MiniloanServiceRulesetRequest(decisionID, borrowerParam, loanParam);
		
		try {
			MiniloanServiceRulesetResponse response = proxy.miniloanServiceRuleset(request);
			System.out.println("Rules executed.");
			System.out.println("Approved: " + response.getLoan().getLoan().isApproved());
			System.out.println("Yearly interest rate: " + response.getLoan().getLoan().getYearlyInterestRate());
			System.out.println("Yearly repayment: " + response.getLoan().getLoan().getYearlyRepayment());
			String[] messages = response.getLoan().getLoan().getMessages();
			if (messages != null) {
				System.out.println("Messages: ");
				for (String message : messages) {
					System.out.println(message);
				}
			}
		}
		catch (Exception e) {
			throw new RuntimeException("An error occurred when invoking Decision Service at: "
										+ endpointURI, e);						
		}
	}

}