| 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/endorsed/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 javax.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 javax.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. |
| |
| |