Robert thornton
Download
1 / 35

Robert Thornton - PowerPoint PPT Presentation


  • 91 Views
  • Uploaded on

Web Services with Apache CXF Part 2 : JAXB and WSDL to Java. Robert Thornton. Notes. This is a training, NOT a presentation Please ask questions This is being recorded https://tech.lds.org/wiki/Java_Stack_Training Prerequisites Maven, Spring, and Web Application Development

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Robert Thornton' - samira


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Robert thornton

Web Services with Apache CXF

Part 2: JAXB and WSDL to Java

Robert Thornton


Notes
Notes

  • This is a training, NOT a presentation

  • Please ask questions

  • This is being recorded

  • https://tech.lds.org/wiki/Java_Stack_Training

  • Prerequisites

    • Maven, Spring, and Web Application Development

    • Web Services, Part I: SOAP

    • A general familiarity with XML simple and complex schema types.


Objectives
Objectives

At the end of this presentation, the participant will be able to:

  • Understand the role of JAXB as a web service data binding solution.

  • Model data entities using JAXB annotations.

  • Understand the purpose and usage of the CXF WSDL2Java tool.

  • Be able to use WSDL2Java to generate a client proxy in a stand-alone Java application.

  • Be able to configure Spring to manage and consume a generated WSDL2Java client proxy .


Web services with apache cxf
Web Services with Apache CXF

Java XML Binding

Modeling Web Service Messages with JAXB


Java and xml
Java and XML

The Marriage of XML and Java:

  • XML is a data markup language.

    • Used for long or short-term data storage.

    • Useful for data transfer between vastly different architectures.

    • Particularly useful for web service architectures.

  • Java is an object-oriented programming language.

    • Unmarshalls (reads) data from existing XML into Java data objects.

    • Performs manipulations on Java objects via services.

    • Marshalls (writes) Java objects into a new XML representation.


Java and xml choices choices
Java and XML: Choices, choices….

The marriage of Java and XML has produced a large family of technologies, strategies, and libraries:

  • DOM

  • StAX

  • JAXP

  • DOM4J

  • JAXB

  • XML Beans

  • JDOM

  • XStream

  • and many more….


Java and xml overview
Java and XML: Overview

Most Java XML strategies fall into three spaces:

  • DOM (Document Object Model)

    • Entire document model is held in memory as nodes in a document tree.

  • Streaming

    • An event-based API for operating on each piece of the XML document individually and in sequence. Often used to stream XML for building DOM trees or construct XML Object bindings.

  • XML-to-Object Binding

    • XML types and elements are bound to Java types and fields.

      In practice, most solutions use some combination of these.


Jaxb a data binding solution
JAXB: A Data Binding Solution

The JAXB API is the standard solution provided by the JDK for Java XML data binding:

  • Java classes are bound to XML types, elements, and attributes through Java annotations.

  • A XML streaming event-based (StAX) parser is used to parse XML documents and construct Java objects as well as to write Java objects back to XML.

  • The XJC tool (included in the JDK) can generate JAXB annotated classes from an existing XML Schema.

  • The Schemagen tool (also included in the JDK) can generate an XML schema from JAXB annotated classes.


Jaxb and web services
JAXB and Web Services

As a data modeling API, JAXB is particularly useful to web services, because:

  • XML is the most common form of data transport.

  • Annotated Java classes can be made to represent XML schema types.

  • JAXB APIs can unmarshall XML into Java data objects and back again.

  • Fits into an RPC-style of service method invocation with POJO parameters and results.

    * Note that the CXF web service framework automatically handles the marshalling and unmarshalling of XML data to and from JAXB annotated Java classes.


Jaxb marshalling and unmarshalling
JAXB: Marshalling and Unmarshalling

Although CXF handles the marshalling and unmarshalling of serviced XML, it can be helpful to know how CXF does it.

  • A web service developer occasionally needs to experiment with how JAXB annotations affect the parsing and rendering of XML.

  • A web service developer often needs to debug issues that arise from data being marshalled or unmarshalled incorrectly.

  • The JAXB Marshalling/Unmarshalling APIs can be used to apply additional validation or to generate a schema.


Jaxb unmarshalling
JAXB: Unmarshalling

JAXB makes unmarshalling from XML easy:

// Just create a JAXB context for your Java data classes

JAXBContext jaxb = JAXBContext.newInstance(myClasses);

// Then unmarshall the XML document into instances of

// those classes.

MyClass obj = (MyClass) jaxb.createUnmarshaller().unmarshall(xml)

The Unmarshaller can accept XML input as a character stream, a file, a DOM node, or several other input types.


Jaxb marshalling
JAXB: Marshalling

Marshalling objects into XML is just as easy:

// Create a JAXB context for your Java data classes

JAXBContext jaxb = JAXBContext.newInstance(myClasses);

// Marshall your Java object hierarchy into an XML document.

jaxb.createMarshaller().marshall(myObject, output);

The Marshaller can serialize the XML to a character stream, a file, a DOM node, or several other output types.


Jaxb the context
JAXB: The Context

Instances of the JAXBContext class effectively represent an “in-memory” schema of your data:

  • It is a registry of all the classes that can be bound to XML types.

  • It is a factory for Marshaller and Unmarshaller instances.

  • It can be supplied listeners and a Schema for additional validation.

  • It can be used to generate an XML Schema from your JAXB annotated classes.


Jaxb non annotated class demo
JAXB: Non-annotated Class Demo

Demo

XML Output without JAXB Annotations


Jaxb annotations
JAXB: Annotations

Although JAXB can bind almost any Java data object with little or no annotations, annotations are typically desirable, for example:

  • They can tell JAXB whether to unmarshal a field into an attribute or an element.

  • They can inform JAXB of ID fields, element order, and other schema constraints.

  • They can be used to identify or customize schema types, element names, attribute names, element wrapping, etc.


Jaxb common annotations
JAXB: Common Annotations

JAXB defines many annotations to customize Java XML data binding. Here are just a few:

  • @XmlRootElement

  • @XmlElement

  • @XmlAttribute

  • @XmlElementWrapper

  • @XmlElementRef

  • @XmlElementRefs

  • @XmlTransient

These and more can be found in the following package:

  • javax.xml.bind.annotation

  • <insert link to docs or tutorial>


Jaxb non annotated class demo1
JAXB: Non-annotated Class Demo

Demo

XML Output with JAXB Annotations


Jaxb rules and conventions
JAXB: Rules and Conventions

Some general rules about JAXB annotations:

  • Concrete classes must have a public default no-arg constructor.

  • Properties that reference interfaces must be annotated with one or more @XmlElementRef annotations that identify the possible concrete types.

  • Annotations may be placed on the fields or on the setters but not on both.

  • By convention, annotating fields is preferable for simple POJOs.

  • Properties not bound to XML values must be annotated with @XmlTransient.


Apache cxf soap lab 1
Apache CXF: SOAP: Lab 1

Lab 1: JAXB Data Binding

http://tech.lds.org/wiki/Web_Services_with_Apache_CXF_-_Part_2


Web services with apache cxf1
Web Services with Apache CXF

WSDL to Java

Consuming 3rd Party Web Services


Wsdl 2 java
WSDL 2 Java

Third-party SOAP web services are typically consumed in one of two ways:

  • Using a client JAR prepared by the service provider.

    • Contains the necessary Java classes and stubs for accessing the web service.

  • Using a WSDL-to-Java tool.

    • Automatically generates the necessary Java classes and stubs from a published web service descriptor, or WSDL.


Wsdl to java code generation
WSDL to Java: Code Generation

What is generated by a WSDL to Java tool?

  • A service client.

    • Will extend javax.xml.ws.Serviceand/or be annotated withjavax.xml.ws.@WebServiceClient

  • One or more service endpoint interfaces.

    • Will have the @javax.jws.WebService annotation

  • Model classes bound to any complex XML types used by the service.

    • Will have with JAXB annotations.


Wsdl to java code generation1
WSDL to Java: Code Generation

Demos

http://www.webservicex.net/geoipservice.asmx?wsdl

A Generated Web Service Client

A Generated Endpoint Interface

Generated JAXB Model Classes


Wsdl 2 java code generation
WSDL 2 Java: Code Generation

Client code generation is cool, but …

When do you use it?


Wsdl to java code generation2
WSDL to Java: Code Generation

Option #1: One-time generation

  • Run command-line tools and copy to project.

    • wsimport (JDK)

      • http://download.oracle.com/javase/6/docs/technotes/tools/share/wsimport.html)

    • wsdl2java (CXF)

      • http://cxf.apache.org/docs/wsdl-to-java.html

  • IDE Web Service Client Wizards

    When to use?

  • Need to customize what is generated

  • Want to avoid dependence on build tools


Wsdl to java code generation3
WSDL to Java: Code Generation

Option #2: Build-time generation

  • Using Maven Plugins:

    • org.codehaus.mojo:jaxws-maven-plugin

      • Uses the JDK wsimport tool

    • org.apache.cxf:cxf-codegen-plugin

      • Uses the CXF wsdl2java tool

        When to use?

  • Need to stay up-to-date with a changing WSDL.

  • Don’t need to tweak generated code

  • Don’t want to own or manage the generated source code.


Wsdl to java code generation4
WSDL to Java: Code Generation

Due to its rich Spring integration, the Java Stack recommends the CXF wsdl2javatool to consume third-party SOAP services.

Maven Usage:

<plugin>

<groupId>org.apache.cxf</groupId>

<artifactId>cxf-codegen-plugin</artifactId>

<executions>...</executions>

</plugin>


Maven execution:

<execution>

<id>wsdl2java</id>

<phase>generate-sources</phase>

<goals><goal>wsdl2java</goal></goals>

<configuration>

<wsdlOptions>

<wsdlOption>

<wsdl>${wsdlUrl}</wsdl>

</wsdlOption>

</wsdlOptions>

</configuration>

</execution>


Wsdl to java lab 2
WSDL to Java: Lab 2

Lab 2: Using WSDL to Java

http://tech.lds.org/wiki/Web_Services_with_Apache_CXF_-_Part_2


Wsdl to java spring integration
WSDL to Java: Spring Integration

Managing the generated endpoint with Spring:

  • When the generated stubs aren’t enough.

    • Need to apply security (WSS4J/Spring Security)

    • Need to apply additional in/out interceptors

  • Stack namespace handler: <stack-ws:consume/>

    • To simplify common security and configuration needs

    • http://code.lds.org/schema/spring/ws/stack-ws-1.1.xsd

  • CXF namespace handler: <jaxws:client/>

    • For more advanced client configuration.


Wsdl to java spring configuration
WSDL to Java: Spring Configuration

Attributes to <stack-ws:consume/>

  • service-class

    • The bean name of the endpoint implementation class.

  • endpoint

    • The published endpoint service address.

  • user, password, password-type

    • For user authentication. Both plain text and digest passwords are supported.

  • wam-authenticator, wam-cookie-resolver-ref

    • Provides authentication through WAM

  • ssl-trust-server

    • Specifies whether the server’s SSL cert should be automatically trusted.


Wsdl to java spring configuration1
WSDL to Java: Spring Configuration

Example Usage:

<stack-ws:consume

service-class="org.lds.MyService"

endpoint="http://www.lds.org/myservice">

<stack-ws:in-interceptors>

<bean idref="customInInterceptor2"/>

</stack-ws:in-interceptors>

<stack-ws:out-interceptors>

<bean idref="customOutInterceptor1"/>

</stack-ws:out-interceptors>

</stack-ws:consume>


Wsdl to java spring integration1
WSDL to Java: Spring Integration

Demo

Using an endpoint interface generated by WSDL to Java in a Spring integration test.


Conclusion
Conclusion

  • The standard Java APIs can be used to model your data for use by web services.

  • The JDK, CXF, and the Java Stack provide code generation and configuration utilities to make it easier to consume third-party web services.

  • For more information about JAXB and CXF, please visit the links on the following page.


Resources
Resources

On the web:

  • http://cxf.apache.org

  • Java 6 API Documentation

  • JDK 6 Programmer Guides

  • Java Stack Documentation


ad