Book Image

Apache CXF Web Service Development

By : Naveen Balani, Rajeev Hathi
Book Image

Apache CXF Web Service Development

By: Naveen Balani, Rajeev Hathi

Overview of this book

<p>Apache CXF framework helps you to develop a standards-based programming model and also provides a flexible deployment model for deploying web services. Developing SOAP and RESTful applications can be made easy by using Apache CXF framework. However, getting started with developing web services using the Apache CXF framework is not easy.<br /><br />This is the first book that gives details on how to use the Apache CXF framework for developing SOAP and REST web services. It is a hands-on practical guide that simplifies working with CXF framework as it covers all major aspects with real-world examples. The chapters cover the various CXF features in detail and each has systematic steps with practical, simple examples to implement these features on your web services. <br /><br />The book introduces the Apache CXF framework and its features such as Frontend API, Data Bindings, Transports, Spring-based configuration, and CXF tools. It also has chapters on SOAP and RESTful services. It will help you create RESTful services that support XML as well as the widely accepted Java Script Object Notation (JSON) format. It explains the components of CXF architecture that help developers customize the Apache CXF framework to suit the target application. The book covers both code-first and contract-first approaches for service deployment. You will see how to develop services in a flexible deployment model offered by CXF, unit test them in a stand-alone environment, and finally promote them in an application server environment.<br /><br />The instructions in this book will help developers to build their application according their requirements by using any of the frontends supported by Apache CXF framework. The various CXF frontend APIs covered in this book provide a wide variety of options in developing and deploying your application.<br /><br />The book introduces some advanced concepts such as Interceptors and features that will add extra capability to your service component. It will help you take advantage of different transport features offered by the CXF runtime such as HTTP, HTTP(S), and JMS protocols.<br />Finally, the book mentions various tools that help developers creating web services as well as creating Java and JavaScript-based web services clients which invoke a real-world .NET web service. These tools are standard batch files that can be easily executed from the Windows command shell by following the instructions in the book.</p>
Table of Contents (16 chapters)
Apache CXF Web Service Development
Credits
About the Authors
About the Reviewer
Preface
Index

Understanding Inversion of Control


The basic concept of the Inversion of Control pattern (also known as dependency injection) is that you do not create your objects but describe how they should be created.

Take the following example of a loan processing application. For simplicity the Loan process system carries out three steps—Customer Address verification, Credit verification, and Loan assessment. Each of these steps is implemented as Java classes, VerifyAddress, VerifyCredit, and LoanAssessment, respectively. Now, in traditional application development without IoC, the following code snippet would be used by the Loan processing application to carry out the loan processing as part of the appyLoan() method shown below:

package demo.spring;

public class LoanProcessImpl {

   public Loan
 applyLoan(Loan loan) {

      VerifyAddress verifyAddress = new VerifyAddressImpl();
      VerifyCredit verifyCredit = new VerifyCreditImpl();
      LoanAssessment loanAssessment = new LoanAssessmentImpl();
      
      //Step one - verify address
      boolean validAddress = verifyAddress.verifyAddress(loan.getCustomer().getAddress());
      if(!validAddress){
         throw new RuntimeException("Address for Customer SSN "+loan.getCustomer().getSSN() + " is not valid");
      }
      //Step two -verify credit
      String status = verifyCredit.verifyCredit(loan.getCustomer());
      if(status.equalsIgnoreCase(VerifyCredit.BAD_CREDIT)){
         //If bad credit, disapprove Loan
         loan.setLoanStatus(LoanAssessment.LOAN_REJECTED);
         return loan;
      }else {
         return loanAssessment.assessLoan(loan);
      }

      
   }

   
}

As you see in the previous code, in the applyLoan() method we have created an instance of VerifyAddress, VerifyCredit, and LoanAssessment objects. If any of these objects is dependant on other objects, then it needs to be instantiated in that scope (that is, in that class or method). These dependencies can grow based on our application, and manageability could become a difficult task. You may not realize that most of the time your object would be stateless and would eventually require one shared instance of object in your application, rather than creating a creating a new object for every request. Apart from object creation, you could also have configuration in your code, such as looking up the Data source connection factory using JNDI.

Applying IoC principles would make your design modular and move the object creation code and configuration outside of the application code and manage these dependency in an external configuration file. A container (like the Spring framework's IoC container) then uses the external configuration file to create the beans, manage the dependency and assemble the application from these loosely coupled beans. In the Spring IoC application section, we will look at how to apply IoC principles using Spring by taking the example of the Loan application that we discussed above.