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 {productName} 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 Jakarta 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 {productName}
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://eclipse-ee4j.github.io/jakartaee-tutorial/#web-services[Web Services]"
in The Jakarta EE Tutorial shows how to deploy simple web services to
{productName}.

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 more information about using Fast Infoset,
see the https://eclipse-ee4j.github.io/metro-wsit/3.0.0/guide/ch02.html#using-fastinfoset[
Metro WSIT Guide]


[[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://eclipse-ee4j.github.io/jakartaee-tutorial/#web-services[
Web Services]" in The Jakarta EE Tutorial.

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

=== Deploying a Web Service

You deploy a web service endpoint to the {productName} 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 {productName} 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.html#GSDPG[
{productName} Application Deployment Guide].
For more information about the
`asadmin deploy` command, see the link:reference-manual.html#GSRFM[
{productName} 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]
----
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]
----
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]
----
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]
----
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.html#GSDPG[{productName}
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
Jakarta EE APIs.

The EclipseLink JAXB implementation, plus EclipseLink extensions, is
called MOXy. The `org.eclipse.persistence.moxy.jar` file is bundled with
{productName}, 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]
----
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,java]
----
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,java]
----
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,xml]
----
<endpoint name='hello'
  implementation='hello.HelloImpl'
  url-pattern='/hello'
  databinding='eclipselink.jaxb'
/>
----

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

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

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

=== GlassFish Jakarta EE Service Engine

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

The Jakarta EE Service Engine acts as a bridge between the Jakarta EE and JBI
runtime environments for web service providers and web service
consumers. The Jakarta 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 Jakarta 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 Jakarta 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 Jakarta 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 Jakarta EE application or module to a JBI application or the
reverse.

To deploy a Jakarta 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.html#GSRFM[
{productName} Reference Manual].
For more information about autodeployment, see
"link:application-deployment-guide/deploying-applications.html#GSDPG00041[
To Deploy an Application or Module Automatically]"
in {productName} 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 Jakarta 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,xml]
----
<?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,xml]
----
<?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 Jakarta EE Service Engine enables the endpoints described in the
`provides` section of the `jbi.xml` file in the JBI runtime. Similarly,
the Jakarta EE Service Engine routes invocations of the endpoints described
in the `consumes` section from the Jakarta EE web service consumer to the
JBI runtime.


