Table of Contents
This chapter introduces a new JEUS web service type that uses Fast Infoset, and describes how to implement and use the service.
The Fast Infoset standard specifies effective XML infosets, which can be used in place of XML, in a binary format.
The Fast Infoset specification with the full name "ITU-T Rec. X.891 | ISO/IEC 24824-1 Fast Infoset" is defined by the following organizations.
ITU-T(International Telecommunications Union - Telecommunication Standardization Sector
ISO(International Standards Organization)
http://www.iso.org/iso/home/standards_development/list_of_iso_technical_committees.htm
Like an XML document, a Fast Infoset document denotes a binary instance of such XML Infosets. An XML document and Fast Infoset document internally contain XML Infoset. The Fast Infoset document can be serialized or parsed faster and the size is smaller than that of an XML document. A Fast Infoset document can be used when the processing speed and size of an XML document are a concern.
A Fast Infoset document can be serialized or parsed like an XML document.
Serialization process
Serialization process involves obtaining Fast Infoset from XML Infoset that corresponds to an SAX event or a DOM document obtained from an XML document. The Fast Infoset is used to obtain a Fast Infoset document.
Parsing process
Parsing process involves obtaining a Fast Infoset from the Fast Infoset document, and then obtaining an XML Infoset from the Fast Infoset. The Fast Infoset specification guarantees an effective serialization and parsing processes as well as optimal file size reduction.
The following figure shows the serialization and parsing processes.
A Fast Infoset document can be serialized and parsed faster and can be compressed more than an XML document.
Other advantages are:
No end-tag like the one used in an XML document exists.
No escape character data exists.
The decoder that converts a Fast Infoset document into Fast Infoset already has the length information.
Indexing of repeated strings.
Indexing of namespaces.
Can contain binary contents.
Preserves the states of documents with similar vocabularies.
Advantages of binary Fast Infoset documents are:
Element items or character information are encoded into smaller bits.
Fast Infoset encoder and decoder can be implemented easily and efficiently due to well-defined boundaries.
Speed can be enhanced when serialized or parsed by using indexing information due to the reduced target size.
Suitable for using the streaming function.
This section describes the ContentNegotiation, a mechanism for using the Fast Infoset function.
To use the Fast Infoset function in a JAX-WS web service, the user must specify whether to use the function for Accept, which is the standard HTTP header, or Content-Type. Since the client, who invokes the web service, always decides whether to use Fast Infoset and implements it through the HTTP header, this technique is called content negotiation.
The first SOAP message transmitted from the Web service's Fast Infoset, which is decided by whether the client inserts information into the HTTP header, is XML- encoded. If the client includes information about MIME type 'application/fastinfoset' in the HTTP Accept header, all SOAP messages, after the first transmission, are encoded by using Fast Infoset as long as the server supports Fast Infoset. In other words, if the client transmits an XML encoded SOAP message to MIME type 'application/fastinfoset' in the HTTP Accept header, the server, that supports Fast Infoset, transmits a response message encoded by Fast Infoset. If the client later transmits another message through the same stub object, the client and server will exchange messages encoded by Fast Infoset. Such technique is called negotiation pessimistic.
Use the following configuration to use Fast Infoset in the JAX-WS web service.
Configure client property.
((BindingProvider) stubOrDispatch).getRequestContext().put( com.sun.xml.ws.client.ContentNegotiation.PROPERTY, "pessimistic");
Configure a system variable of the client VM.
java -Dcom.sun.xml.ws.client.ContentNegotiation=pessimistic
To use Fast Infoset in a JAX-WS web service, a user can configure the client property in the client application, or the system variable on the client VM.
This section describes the former.
Functions provided through other options are not available on the server. As already mentioned, all Fast Infoset properties are configured by the client.
The following is an example of configuring the Fast Infoset property in a client application.
[Example 11.1] << AddNumbersClient.java >>
public class AddNumbersClient { public static void main(String[] args) { AddNumbersImpl port = new AddNumbersImplService().getAddNumbersImplPort(); ((BindingProvider) port).getRequestContext().put( ContentNegotiation.PROPERTY, "pessimistic"); int number1 = 10; int number2 = 20; System.out.println("#################################################"); System.out.println("### JAX-WS Webservices examples - fastinfoset ###"); System.out.println("#################################################"); System.out.println("Testing Fast Infoset webservices..."); int result = port.addNumbers(number1, number2); if (result == 30) { System.out.println("Success!"); } } }
As shown in the previous example, set the 'pessimistic' property to ContentNegotiation of the request context through a proxy(stub) object obtained from the service interface.
The following shows how to execute a Fast Infoset Web service by using the implemented classes and other configuration files in this section. Other SEI implementation classes and configuration files are the same as those in the examples of the previous section.
Create a service with Fast Infoset Web service configured, and deploy it to JEUS.
$ ant build deploy
Since the client is processed by using the wsimport tool, it can only be built after the service has been deployed.
As shown in the following example, create a client in which Fast Infoset is configured and then invoke the service.
$ ant run ... run: [java] ################################################# [java] ### JAX-WS Webservices examples - fastinfoset ### [java] ################################################# [java] Testing Fast Infoset webservices... [java] Success! ... BUILD SUCCESSFUL
$ ant run ---[HTTP request]--- Host: localhost:8088 Content-length: 218 Content-type: text/xml; charset=utf-8 Accept: application/fastinfoset, text/xml, multipart/related, text/html, image/g if, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive Soapaction: "" User-agent: JAX-WS RI 2.2 - JEUS 8 <?xml version="1.0" ?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envel ope/"><S:Body><ns2:addNumbers xmlns:ns2="http://server.fastinfoset/"><arg0>10</a rg0><arg1>20</arg1></ns2:addNumbers></S:Body></S:Envelope> -------------------- ---[HTTP response 200]--- ?