Table of Contents
Preface; Overview; Intended Audience; What This Book Covers; How to Read This Book; Using Code Examples; Hang in There!; Conventions Used in This Book; Safari® Books Online; How to Contact Us; Dedication; Acknowledgments; SOA Fundamentals; Chapter 1: Introduction to SOA; 1.1 Introduction; 1.2 Defining a Service; 1.3 Defining SOA; 1.4 Identifying Service Candidates; 1.5 Identifying Different Kinds of Services; 1.6 Modeling Services; 1.7 Making a Service Composable; 1.8 Supporting Your SOA Efforts; 1.9 Selecting a Pilot Project; 1.10 Establishing Governance; 1.11 Summary; Chapter 2: XML Schema and the SOA Data Model; 2.1 Introduction; 2.2 Designing Schema for SOA; 2.3 Creating Canonical Data Model; 2.4 Using Chameleon Namespace Design; 2.5 Versioning Schemas; 2.6 Reference Schemas; 2.7 Common Schema Types; 2.8 Validating an XML Document Against a Schema; 2.9 Validating an XML Document Against Multiple Schemas; 2.10 Restricting Schema Types with Regular Expressions; 2.11 Using Schema Enumerations; 2.12 Generating Java Classes from Schema; 2.13 Generating a Schema from Java; 2.14 Generating Java Source Files from XML Schema in Ant; 2.15 Generating an XML Document Instance from a Schema; 2.16 Customizing How a Java Class Is Generated from Schema; 2.17 Validating Against a Schema During Marshaling and Unmarshaling; 2.18 Collecting Schema Validation Events During Marshaling and Unmarshaling; 2.19 Summary; Chapter 3: Working with XML and Java; 3.1 Introduction; 3.2 Reading an XML Data Stream; 3.3 Writing XML Data Streams; 3.4 Filtering Data in an XML Stream; 3.5 Selecting Values from an XML Document; 3.6 Updating a Value in an XML Document; 3.7 Converting a Java Object into an XML Document Instance; 3.8 Converting an XML Document Instance into a Java Object; 3.9 Generating a Schema from an XML Document; 3.10 Converting XML to Java Without JAXB; 3.11 Customizing Code Generation in JAXB; 3.12 Finding the JAR That Contains a Given Class on Linux; 3.13 Transparently Substituting XML Files; 3.14 Summary; Web Services; Chapter 4: Getting Started; 4.1 Introduction; 4.2 Using Publicly Available Web Services to Test Against; 4.3 Installing Metro; 4.4 Installing Oracle WebLogic; 4.5 Creating and Deploying the Simplest Web Service; 4.6 Creating and Deploying a Service to WebLogic; 4.7 Setting Up a Maven 2 Service and Client Project; 4.8 Understanding WSDL; 4.9 Using References in NetBeans to Generate Web Service Clients; 4.10 Monitoring SOAP Traffic with Metro; 4.11 Monitoring SOAP Traffic with TCPMon; Chapter 5: Web Services with SAAJ; 5.1 Introduction; 5.2 Creating a SOAP Element with a Qualified Name; 5.3 Creating a Complete SOAP Message; 5.4 Writing a SOAP Response to an Output Stream; 5.5 Creating a Web Service Client Based on an Existing SOAP Envelope; 5.6 Extracting Content from a SOAP Message; 5.7 Creating a Web Service Client Using Raw XML Source and DOM; 5.8 Adding a MIME Header; 5.9 Adding Namespace Declarations; 5.10 Specifying SOAPAction; 5.11 Adding an Attribute to an Element; 5.12 Removing a Header from a SOAP Message; 5.13 Adding Headers to a SOAP Request; 5.14 Accessing All SOAP Header Elements; 5.15 Adding an Attachment to an Outbound SOAP Message; 5.16 Accessing Inbound Attachment Data; 5.17 Connecting to a SAAJ Endpoint Without a WSDL; 5.18 Working with SOAP Actors; 5.19 Asynchronous Invocation with Dispatch; 5.20 Validating Your Payload Against a Schema on the Client; 5.21 Providing a Web Service with SAAJ; 5.22 Sending and Receiving SOAP Faults; 5.23 Summary; Chapter 6: Creating Web Service Applications with JAX-WS; 6.1 Introduction; 6.2 Calling a Web Service from the Command Line; 6.3 Using JAX-WS Annotation Name Properties; 6.4 Invoking the Simplest Web Service; 6.5 Creating a Client Proxy; 6.6 Consuming a Web Service from a Servlet or EJB; 6.7 Consuming a Web Service from a JSP; 6.8 Using a JAXB-Annotated Instance in a SOAP Message; 6.9 Using wsimport in a Maven Project; 6.10 Dealing with Version Errors in wsgen and wsimport; 6.11 Adding Headers to a SOAP Request; 6.12 Intercepting the Request to Perform Protocol-Specific Work; 6.13 Intercepting the Request to Perform Work on Your Payload; 6.14 Sharing Data Between Handler Invocations; 6.15 Passing Binary Data in a Request; 6.16 Using Binary Data in a SOAP Message; 6.17 Enabling Binary Optimization on the Client; 6.18 Validating a SOAP Payload Against a Schema with Metro; 6.19 Making Asynchronous Calls with a JAX-WS Client; 6.20 Overriding the Endpoint Address in an SEI; 6.21 Summary; Chapter 7: Providing SOAP-Based Web Serviceeeeees; 7.1 Introduction; 7.2 Assembling a Service for Deployment; 7.3 Determining a Service Development Model; 7.4 Choosing Encoding, Use, and Parameter Styles; 7.5 Generating a WSDL and Portable Artifacts Based on a Java Service Endpoint Implementation; 7.6 Creating a Basic Web Service; 7.7 Specifying Namespaces; 7.8 Creating a Web Service Operation; 7.9 Specifying a Web Service Message Part; 7.10 Specifying an Operation Return Value; 7.11 Defining Zero-Argument Operations; 7.12 Defining Operations with Void Return Type; 7.13 Creating a Web Service That Uses Complex Types Based on Custom WSDL and a Custom Schema; 7.14 Specifying the SOAP Binding Style, Use, and Parameter Style; 7.15 Configuring Standard Custom Bindings; 7.16 Excluding a Public Method from a Service; 7.17 Creating a Service Provider with an XML View; 7.18 Implementing Server-Side Handler Chains; 7.19 Providing Stateful Services; 7.20 Adding a Header with a Method Parameter; 7.21 Accessing Incoming Header Parameters in a Service; 7.22 Providing a Value for SOAP Action or WS-Addressing Action; 7.23 Optimizing Transmission of Binary Content on the Server; 7.24 Getting and Sharing Data About Users and the Request; 7.25 Using Header References with Holder 7.26 Summary; Chapter 8: RESTful Web Services; 8.1 Introduction; 8.2 Creating a POX over HTTP Service with Servlets; 8.3 A RESTful Service with JAX-WS; 8.4 Creating a Client for a RESTful Service Using Sockets; 8.5 Application: Using SSL, Atom Publishing, and the Google Finance REST API; 8.6 Setting Up the Jersey JAX-RS Implementation; 8.7 Creating a Jersey Project with Eclipse and Tomcat; 8.8 Creating Hello World with Jersey; 8.9 Creating a Single Path for Variable Resources of the Same Type; 8.10 Restricting the Structure of Values in a Path Template; 8.11 Accessing Query Parameters; 8.12 Marshaling a Custom Type to XML in a Response; 8.13 Offering Different Representations of the Same Resource; 8.14 Creating a Resource; 8.15 Working with Forms and URIs; 8.16 Using SAAJ to Access a RESTful Service; 8.17 Setting Metadata on Representations; 8.18 Deleting a Resource; 8.19 Redirecting to Another Service; 8.20 Accessing HTTP Headers; 8.21 Working with Cookies; 8.22 Working with Exceptions and Response Status Codes; 8.23 Working with WADL; 8.24 Interacting with a Resource Using a Custom Reader and Writer; 8.25 Summary; Business Processes; Chapter 9: Service Orchestrations with BPEL; 9.1 Introduction; 9.2 Determining a Process Design Method; 9.3 Selecting a Business Process Language; 9.4 Getting Apache ODE BPEL Engine; 9.5 Deploying a Process to Apache ODE; 9.6 Understanding BPEL Process Basics; 9.7 Using a Free Graphical Designer to Create BPEL Processes; 9.8 Creating a BPEL Process That Invokes a Partner; 9.9 Deploying a BPEL Process to OpenESB’s BPEL Service Engine; 9.10 Testing a Deployed BPEL Process; 9.11 Installing Active Endpoints BPEL Designer; 9.12 Installing Active Endpoints BPEL Engine; 9.13 Creating a BPEL Process in Active Endpoints Designer; 9.14 Deploying a Process to Active Endpoints Server; 9.15 Using Web Service Partners; 9.16 Invoking a Partner Service from a BPEL Process; 9.17 Manipulating Data with BPEL Variables; 9.18 Using Literals; 9.19 Concatenating Values; 9.20 Choosing an Activity to Execute Based on Runtime Conditions; 9.21 Executing Multiple Activities in a Sequence; 9.22 Using Logical Divisions to Group Activities; 9.23 Summary; Chapter 10: Advanced Orchestrations with BPEL; 10.1 Introduction; 10.2 Executing Activities in Parallel; 10.3 Synchronizing Activities Executing in Parallel; 10.4 Doing Nothing; 10.5 Executing an Activity at a Specific Point in Time; 10.6 Executing an Activity After a Specific Delay; 10.7 Selective Event Processing; 10.8 Handling Faults; 10.9 Explicitly Throwing a Fault; 10.10 Stopping a Process; 10.11 Performing an XSL Transformation on BPEL Message Data; 10.12 Validating Inbound Message Data; 10.13 Correlation Sets; 10.14 Looping; 10.15 Adding Human Tasks to a Business Process; 10.16 Invoking a RESTful Web Service from BPEL; 10.17 Summary; Chapter 11: SOA Governance; 11.1 Introduction; 11.2 Assigning Roles; 11.3 Creating a SOA Roadmap; 11.4 Keeping Track of Your Services; 11.5 Determining a Data Ownership Scheme for Services; 11.6 Handling Legacy Programs and Heterogeneity Within Your SOA; 11.7 Documenting Services; 11.8 Setting Up a Service Registry; 11.9 Packaging Related Services; 11.10 Retiring a Service; 11.11 Browsing a UDDI Registry; 11.12 Querying a UDDI Registry Programmatically; 11.13 Understanding SOA ROI; Interoperability and Quality of Service; Chapter 12: Web Service Interoperability; 12.1 Introduction; 12.2 Dealing with Arrays; 12.3 Abstracting Addressing; 12.4 Using Addressing in a Java Service; 12.5 Explicitly Enabling Addressing on the Client; 12.6 Explicitly Disabling Addressing on the Client; 12.7 Abstracting Addressing in the Transport Layer from WSDL; 12.8 Addressing Faults; 12.9 Creating a .NET Web Service Client in Visual Studio; 12.10 Creating a .NET Web Service Client in C#; 12.11 Creating a .NET Web Service; 12.12 Creating a Ruby Client for a Web Service; 12.13 Creating a Ruby Client for a .NET Service; 12.14 Conforming to the Basic Profile; 12.15 Automating Testing for Basic Profile Conformance; 12.16 Interoperability Best Practices; 12.17 Using Modular WSDLs; Chapter 13: Quality of Service; 13.1 Introduction; 13.2 Understanding Reliable Messaging; 13.3 Configuring a Java Web Service with Reliable Messaging; 13.4 Configuring a Java Client with Reliable Messaging; 13.5 Configuring a Java Web Service with Reliable Messaging on WebLogic; 13.6 Using a WebLogic Reliable Messaging Error Handler; Chapter 14: Enterprise Service Bus; 14.1 Introduction; 14.2 What Is ESB?; 14.3 ESB As a Set of Patterns; 14.4 JBI; 14.5 Commercial ESBs; 14.6 Open Source ESBs; 14.7 Summary; Colophon;
Eben Hewitt is a Principal on the architecture team at a multi-billion dollar national retail company, where he has been focused on designing and building their Service Oriented Architecture. He has worked in IT for ten years, working on large-scale web and SOA integration projects, distributed software, and messaging systems. Hewitt is the author of four previous programming books, several industry articles, and is a contributor to the O'Reilly book 97 Things Every Software Architect Should Know, edited by Richard Monson-Haefel. He is a popular speaker at industry conferences and local user groups.