| [//]: # " Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved. " |
| [//]: # " " |
| [//]: # " This program and the accompanying materials are made available under the " |
| [//]: # " terms of the Eclipse Distribution License v. 1.0, which is available at " |
| [//]: # " http://www.eclipse.org/org/documents/edl-v10.php. " |
| [//]: # " " |
| [//]: # " SPDX-License-Identifier: BSD-3-Clause " |
| |
| JAXB Example |
| ============ |
| |
| This example demonstrates how to use JAXB types with resource classes and the JAX-RS Client API. |
| |
| The following JAXB types are supported and demonstrated: |
| |
| - JAXB classes annotated with @XmlRootElement |
| - JAXB classes annotated with @XmlType |
| - JAXBElement<T> where T is a JAXB xml type that may or may not be annotated with @XmlType |
| - List<T>, Collection<T>, and T\[\] where T is a JAXB class annotated with @XmlRootElement or @XmlType |
| |
| It also shows how to use @XmlHeader annotation to specify the header of the XML responses. |
| |
| Contents |
| -------- |
| |
| The mapping of the URI path space is presented in the following table: |
| |
| URI path | Resource class | HTTP methods |
| --------------------------------------- | ------------------------ | -------------- |
| **_/jaxb/XmlRootElement_** | JaxbResource | GET, POST |
| **_/jaxb/XmlRootElementWithHeader_** | JaxbResource | GET |
| **_/jaxb/JAXBElement_** | JaxbResource | GET, POST |
| **_/jaxb/XmlType_** | JaxbResource | POST |
| **_/jaxb/collection/XmlRootElement_** | JaxbCollectionResource | GET, POST |
| **_/jaxb/collection/XmlType_** | JaxbCollectionResource | POST |
| **_/jaxb/array/XmlRootElement_** | JaxbArrayResource | GET, POST |
| **_/jaxb/array/XmlType_** | JaxbArrayResource | POST |
| |
| JAXB classes annotated with @XmlRootElement may be produced and |
| consumed. JAXB classses annotated with @XmlType can only be consumed |
| hence why only the POST method is supported for the resources associated |
| with XmlType. This is because the JAXB requires enough information to |
| serialize the JAXB instance to a well-formed XML document. The same |
| rules apply to collections of such classes. |
| |
| For the serialization of a Collection of JAXB type, or an array, Jersey |
| will automatically derive the XML root element of the XML document to |
| serialize from the XML name of the JAXB class annoated with |
| @XmlRootElement. |
| |
| Running the Example |
| ------------------- |
| |
| Run the example as follows: |
| |
| > mvn clean compile exec:java |
| |
| This deploys the example using [Grizzly](http://grizzly.java.net/) container. You can access the application at: |
| |
| - <http://localhost:8080/jaxb/jaxb/XmlRootElement> |
| - <http://localhost:8080/jaxb/jaxb/XmlRootElementWithHeader> |
| - <http://localhost:8080/jaxb/jaxb/JAXBElement> |
| - <http://localhost:8080/jaxb/jaxb/collection/XmlRootElement> |
| - <http://localhost:8080/jaxb/jaxb/array/XmlRootElement> |
| |
| or you can post an xml entity: |
| |
| > curl -v -X POST http://localhost:8080/jaxb/jaxb/XmlRootElement -H "Content-Type:application/xml" -d ' |
| > <jaxbXmlRootElement> |
| > <value>xml root element</value> |
| > </jaxbXmlRootElement>' |
| |
| You can see test classes at `src/main/test` subdirectory for detailed information how to consume the service using JAX-RS Client API |