type=page
status=published
title=Developing Web Services
next=jpa.html
prev=securing-apps.html
~~~~~~
Developing Web Services
=======================

[[GSDVG00007]][[gaszn]]


[[developing-web-services]]
5 Developing Web Services
-------------------------

This chapter describes Oracle GlassFish Server support for web services.
The following topics are addressed here:

* link:#gbizi[Creating Portable Web Service Artifacts]
* link:#gbixz[Deploying a Web Service]
* link:#gbiyw[The Web Service URI, WSDL File, and Test Page]
* link:#CHDEBBCH[The Databinding Provider]
* link:#gcgzz[GlassFish Java EE Service Engine]


[NOTE]
=======================================================================

If you installed the Web Profile, web services are not supported unless
the optional Metro Web Services Stack add-on component is downloaded
from the Update Tool. Without the Metro add-on component, a servlet or
EJB component cannot be a web service endpoint, and the
`glassfish-web.xml` and `glassfish-ejb-jar.xml` elements related to web
services are ignored. For information about the Update Tool, see
"olink:GSADG00701[Update Tool]" in GlassFish Server Open Source Edition
Administration Guide.

In addition, the as-install`/modules/webservices-osgi.jar` and
as-install`/modules/webservices-api-osgi.jar` files must be in
the classpath of your web services application. IDEs such as NetBeans
and Eclipse do this automatically.

=======================================================================


"https://javaee.github.io/tutorial/partwebsvcs.html[Web Services]" in
The Java EE 8 Tutorial shows how to deploy simple web services to
GlassFish Server.

For additional information about JAXB (Java Architecture for XML
Binding), see
http://jcp.org/aboutJava/communityprocess/pfd/jsr222/index.html[Java
Specification Request (JSR) 222] and link:#CHDEBBCH[The Databinding
Provider].

For additional information about JAX-WS (Java API for XML-Based Web
Services), see
http://jcp.org/aboutJava/communityprocess/pfd/jsr224/index.html[Java
Specification Request (JSR) 224] and
http://jcp.org/en/jsr/detail?id=109[Java Specification Request (JSR)
109].

For information about web services security, see
link:securing-apps.html#beaca[Configuring Message Security for Web
Services].

The Fast Infoset standard specifies a binary format based on the XML
Information Set. This format is an efficient alternative to XML. For
information about using Fast Infoset, see the following links:

* http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/ReleaseNotes.html[Java
Web Services Developer Pack 1.6 Release Notes]
* http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/jaxrpc/fastinfoset/manual.html[Fast
Infoset in Java Web Services Developer Pack, Version 1.6]
* https://javaee.github.io/metro-fi/[Fast Infoset Project]
(`https://javaee.github.io/metro-fi/`

[[gbizi]][[GSDVG00126]][[creating-portable-web-service-artifacts]]

Creating Portable Web Service Artifacts
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

For a tutorial that shows how to use the `wsimport` and `wsgen`
commands, see "https://javaee.github.io/tutorial/partwebsvcs.html[Web
Services]" in The Java EE 8 Tutorial.

[[gbixz]][[GSDVG00127]][[deploying-a-web-service]]

Deploying a Web Service
~~~~~~~~~~~~~~~~~~~~~~~

You deploy a web service endpoint to the GlassFish Server just as you
would any servlet, stateless session bean (SLSB), or application.


[NOTE]
=======================================================================

For complex services with dependent classes, user specified WSDL files,
or other advanced features, autodeployment of an annotated file is not
sufficient.

=======================================================================


The GlassFish Server deployment descriptor files `glassfish-web.xml` and
`glassfish-ejb-jar.xml` provide optional web service enhancements in the
`webservice-endpoint` and `webservice-description` elements, including a
`debugging-enabled` subelement that enables the creation of a test page.
The test page feature is enabled by default and described in
link:#gbiyw[The Web Service URI, WSDL File, and Test Page].

For more information about deployment, autodeployment, and deployment
descriptors, see the link:../application-deployment-guide/toc.html#GSDPG[GlassFish Server Open Source Edition
Application Deployment Guide]. For more information about the
`asadmin deploy` command, see the link:../reference-manual/toc.html#GSRFM[GlassFish Server Open
Source Edition Reference Manual].

[[gbiyw]][[GSDVG00128]][[the-web-service-uri-wsdl-file-and-test-page]]

The Web Service URI, WSDL File, and Test Page
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Clients can run a deployed web service by accessing its service endpoint
address URI, which has the following format:

[source,oac_no_warn]
----
http://host:port/context-root/servlet-mapping-url-pattern
----

The context-root is defined in the `application.xml` or `web.xml` file,
and can be overridden in the `glassfish-application.xml` or
`glassfish-web.xml` file. The servlet-mapping-url-pattern is defined in
the `web.xml` file.

In the following example, the context-root is `my-ws` and the
servlet-mapping-url-pattern is `/simple`:

[source,oac_no_warn]
----
http://localhost:8080/my-ws/simple
----

You can view the WSDL file of the deployed service in a browser by
adding `?WSDL` to the end of the URI. For example:

[source,oac_no_warn]
----
http://localhost:8080/my-ws/simple?WSDL
----

For debugging, you can run a test page for the deployed service in a
browser by adding `?Tester` to the end of the URL. For example:

[source,oac_no_warn]
----
http://localhost:8080/my-ws/simple?Tester
----

You can also test a service using the Administration Console. Open the
Web Services component, select the web service in the listing on the
General tab, and select Test. For details, click the Help button in the
Administration Console.


[NOTE]
=======================================================================

The test page works only for WS-I compliant web services. This means
that the tester servlet does not work for services with WSDL files that
use RPC/encoded binding.

=======================================================================


Generation of the test page is enabled by default. You can disable the
test page for a web service by setting the value of the
`debugging-enabled` element in the `glassfish-web.xml` and
`glassfish-ejb-jar.xml` deployment descriptor to `false`. For more
information, see the link:../application-deployment-guide/toc.html#GSDPG[GlassFish Server Open Source Edition
Application Deployment Guide].

[[CHDEBBCH]][[GSDVG536]][[the-databinding-provider]]

The Databinding Provider
~~~~~~~~~~~~~~~~~~~~~~~~

The JAX-WS reference implementation (RI) used to be dependent on the
JAXB RI for databinding. JAXB and JAX-WS implementations have been
decoupled, and databinding is modular. JAXB and JAX-WS are no longer
Java EE APIs.

The EclipseLink JAXB implementation, plus EclipseLink extensions, is
called MOXy. The `org.eclipse.persistence.moxy.jar` file is bundled with
GlassFish Server, which supports the JAXB RI and MOXy as databinding
providers.

To specify the databinding provider for the JVM, set the
`com.sun.xml.ws.spi.db.BindingContextFactory` JVM property to one of the
following values:

com.sun.xml.ws.db.glassfish.JAXBRIContextFactory::
  Specifies the JAXB reference implementation. This is the default.
com.sun.xml.ws.db.toplink.JAXBContextFactory::
  Specifies Eclipselink MOXy JAXB binding.

For example:

[source,oac_no_warn]
----
asadmin create-jvm-options -Dcom.sun.xml.ws.spi.db.BindingContextFactory=com.sun.xml.ws.db.toplink.JAXBContextFactory
----

To specify the databinding provider for a web service endpoint:

* Set the `org.jvnet.ws.databinding.DatabindingModeFeature` feature
during `WebServiceFeature` initialization or using the `add` method.
Allowed values are as follows:::
org.jvnet.ws.databinding.DatabindingModeFeature.GLASSFISH_JAXB::
  Specifies the JAXB reference implementation. This is the default.
com.sun.xml.ws.db.toplink.JAXBContextFactory.ECLIPSELINK_JAXB::
  Specifies Eclipselink MOXy JAXB binding. +
For example: +
[source,oac_no_warn]
----
import jakarta.xml.ws.WebServiceFeature;
import org.jvnet.ws.databinding.DatabindingModeFeature;
import com.sun.xml.ws.db.toplink.JAXBContextFactory;
...
WebServiceFeature[] features = {new DatabindingModeFeature(JAXBContextFactory.ECLIPSELINK_JAXB)};
...
----
* Set the `org.jvnet.ws.databinding.DatabindingModeFeature` feature
using the `@DatabindingMode` annotation. For example: +
[source,oac_no_warn]
----
import jakarta.jws.WebService;
import org.jvnet.ws.databinding.DatabindingMode;
import com.sun.xml.ws.db.toplink.JAXBContextFactory;
...
@WebService()
@DatabindingMode(JAXBContextFactory.ECLIPSELINK_JAXB);
...
----
* Set the `databinding` attribute of the `endpoint` element in the
`sun-jaxws.xml` file. Allowed values are `glassfish.jaxb` or
`eclipselink.jaxb`. For example: +
[source,oac_no_warn]
----
<endpoint
name='hello'
implementation='hello.HelloImpl'
url-pattern='/hello'
databinding='eclipselink.jaxb'/>
----

The EclipseLink JAXB compiler is not included but can be used with
GlassFish Server. Download the EclipseLink zip file at
`http://www.eclipse.org/eclipselink/downloads/` and unzip it. The
compiler files are located here:

[source,oac_no_warn]
----
bin/jaxb-compiler.cmd
bin/jaxb-compiler.sh
----

[[gcgzz]][[GSDVG00129]][[glassfish-java-ee-service-engine]]

GlassFish Java EE Service Engine
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

GlassFish Server 5.0 provides the GlassFish Java EE Service Engine, a
JSR 208 compliant Java Business Integration (JBI) runtime component that
connects Java EE web services to JBI components. The Java EE Service
Engine is installed as an add-on component using the Update Tool. Look
for the JBI component named Java EE Service Engine. A JBI runtime is not
installed with or integrated into GlassFish Server 5.0 and must be
obtained separately. For more information about using the Update Tool to
obtain the Java EE Service Engine and other add-on components, see
"link:../administration-guide/toc.html#GSADG00701[Update Tool]" in GlassFish Server Open Source Edition
Administration Guide.

The Java EE Service Engine acts as a bridge between the Java EE and JBI
runtime environments for web service providers and web service
consumers. The Java EE Service Engine provides better performance than a
SOAP over HTTP binding component due to in-process communication between
components and additional protocols provided by JBI binding components
such as JMS, SMTP, and File.

The http://jcp.org/en/jsr/detail?id=208[JSR 208]
(`http://jcp.org/en/jsr/detail?id=208`) specification allows
transactions to be propagated to other components using a message
exchange property specified in the `JTA_TRANSACTION_PROPERTY_NAME`
field. The Java EE Service Engine uses this property to set and get a
transaction object from the JBI message exchange. It then uses the
transaction object to take part in a transaction. This means a Java EE
application or module can take part in a transaction started by a JBI
application. Conversely, a JBI application can take part in a
transaction started by a Java EE application or module.

Similarly, the JSR 208 specification allows a security subject to be
propagated as a message exchange property named
`javax.jbi.security.subject`. Thus a security subject can be propagated
from a Java EE application or module to a JBI application or the
reverse.

To deploy a Java EE application or module as a JBI service unit, use the
`asadmin deploy` command, or autodeployment. For more information about
the `asadmin deploy` command, see the link:../reference-manual/toc.html#GSRFM[GlassFish Server Open
Source Edition Reference Manual]. For more information about
autodeployment, see "link:../application-deployment-guide/deploying-applications.html#GSDPG00041[To Deploy an Application or Module
Automatically]" in GlassFish Server Open Source Edition Application
Deployment Guide.

[[gelxr]][[GSDVG00387]][[using-the-jbi.xml-file]]

Using the `jbi.xml` File
^^^^^^^^^^^^^^^^^^^^^^^^

Section 6.3.1 of the JSR 208 specification describes the `jbi.xml` file.
This is a deployment descriptor, located in the `META-INF` directory. To
deploy a Java EE application or module as a JBI service unit, you need
only specify a small subset of elements in the `jbi.xml` file. Here is
an example provider:

[source,oac_no_warn]
----
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jbi version="1.0" xmlns="http://java.sun.com/xml/ns/jbi" xmlns:ns0="http://ejbws.jbi.misc/">
  <services binding-component="false">
    <provides endpoint-name="MiscPort" interface-name="ns0:Misc" service-name="ns0:MiscService"/>
  </services>
</jbi>
----

Here is an example consumer:

[source,oac_no_warn]
----
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jbi version="1.0" xmlns="http://java.sun.com/xml/ns/jbi" xmlns:ns0="http://message.hello.jbi/">
  <services binding-component="false">
    <consumes endpoint-name="MsgPort" interface-name="ns0:Msg" service-name="ns0:MsgService"/>
  </services>
</jbi>
----

The Java EE Service Engine enables the endpoints described in the
`provides` section of the `jbi.xml` file in the JBI runtime. Similarly,
the Java EE Service Engine routes invocations of the endpoints described
in the `consumes` section from the Java EE web service consumer to the
JBI runtime.


